Python中如何修改Ubuntu下MySQL的用户权限问题
我在 ubuntu 下装的 MySQL,只能用以下方式启动: 1、sudo mysql -u root -p 2、sudo su mysql -u root -p 简而言之就是只能在 root 下运行,但是程序中的生成表和修改查询都不可能会自动用 root 模式啊 求大神指教 :T_T:
Python中如何修改Ubuntu下MySQL的用户权限问题
虽然我没用过乌班图,但是你可能对启动有什么误解。
这个问题我遇到过,核心是要用MySQL的GRANT语句来修改权限,而不是直接改Ubuntu系统用户。
首先确保你有MySQL的root权限,然后连接数据库:
import mysql.connector
# 连接到MySQL
conn = mysql.connector.connect(
host="localhost",
user="root",
password="你的root密码"
)
cursor = conn.cursor()
# 给用户授权的示例
def grant_user_permissions(username, password, database, privileges):
"""
给指定用户授予数据库权限
Args:
username: 要授权的用户名
password: 用户密码
database: 数据库名(使用*表示所有数据库)
privileges: 权限列表,如['SELECT', 'INSERT', 'UPDATE']
"""
try:
# 创建用户(如果不存在)
cursor.execute(f"CREATE USER IF NOT EXISTS '{username}'@'localhost' IDENTIFIED BY '{password}'")
# 授予权限
privileges_str = ', '.join(privileges)
cursor.execute(f"GRANT {privileges_str} ON {database}.* TO '{username}'@'localhost'")
# 刷新权限使更改生效
cursor.execute("FLUSH PRIVILEGES")
print(f"用户 {username} 权限设置成功")
except mysql.connector.Error as err:
print(f"错误: {err}")
finally:
cursor.close()
conn.close()
# 使用示例
if __name__ == "__main__":
# 给用户'myuser'授予对'mydb'数据库的SELECT和INSERT权限
grant_user_permissions(
username="myuser",
password="securepassword",
database="mydb",
privileges=["SELECT", "INSERT", "UPDATE"]
)
几个关键点:
GRANT语句是核心,语法是GRANT 权限 ON 数据库.表 TO '用户'@'主机'FLUSH PRIVILEGES让权限更改立即生效- 常用权限包括:SELECT, INSERT, UPDATE, DELETE, CREATE, DROP等
- 用
*.*表示所有数据库的所有表
如果你需要更细粒度的控制,比如只给某个表的特定权限,可以这样:
# 只给mydb数据库的users表SELECT权限
cursor.execute("GRANT SELECT ON mydb.users TO 'myuser'@'localhost'")
# 给所有数据库的所有权限(相当于管理员)
cursor.execute("GRANT ALL PRIVILEGES ON *.* TO 'adminuser'@'localhost'")
记得修改完权限后一定要执行FLUSH PRIVILEGES。
总结建议:用MySQL的GRANT语句配合Python的mysql-connector来管理用户权限。
你这是在连接数据库。。。。。,不是启动
哦哦,我错了,那就是连接,就是它只能在 root 模式下连接,怎么样才能在普通模式下也能直接连接呢
恩恩,把启动改成连接,你知道怎么改成在普通模式下就可以直接连接吗
恩恩,把启动改成连接,你知道怎么改成在普通模式下就可以直接连接吗
你需要新建一个有登录权限的普通帐号。
简单点来说,连接后:grant all on . to ‘yourid’‘localhost’ identified by ‘yourpasswd’;
权限和允许登录的主机名灵活变动
这里的 root 不是系统 root,是 mysql 的 root 用户,你把 sudo 去掉不行吗?
是不是 all 后面还有一个 privileges,这个命令我试过了,但是不行
已经执行成功了啊。如果没有生效的话 flush privileges;刷新一下
另外,你应该用 mysql -udell -p 登录了
去掉就 error:Access denied for user ‘root’‘localhost’
sudo chmod +x mysql 回车
chmod: 无法访问‘ mysql ’:没有那个文件或目录
还是不行 ::>_<::
A Basic MySQL Tutorial
https://www.digitalocean.com/community/tutorials/a-basic-mysql-tutorial
How To Install WordPress with LAMP on Ubuntu 16.04
https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-lamp-on-ubuntu-16-04
WordPress 安装教程里面有教你怎么创建 MySQL 用户。
MySQL 的用户系统和操作系统的用户系统完全是两套不同的系统,MySQL 的 root 不是操作系统的 root。
楼主你可能需要先了解了解 Linux,感觉很多基础你都不懂
把自己当前使用的用户,加入 MySQL 所在的用户组。
我是一点不懂 >_<
百度不到可以谷歌呀
受教了
检查 /tmp/mysql.sock 的权限,估计就是当前用户没有这个文件的写权限,所以要用到 sudo
我估计你在什么神奇的地方做了什么神奇的操作
我觉着,你先了解下 linux 操作系统比较好
还有就是 mysql 的命令行连接的操作
不是的,我真的没做什么,就用 sudo apt-get install mysql-server mysql-common 然后它就只能 sudo mysql -u root -p 这样子,反正不能直接右键打开终端然后 mysql -u root -p
咋检查
sudo apt-get install mysql-server mysql-common
中间还输了什么命令?做了错事不要装傻噢🤥
sudo mysql -u root -p
#25 我在想你是不是把 ubuntu root 用户密码和 mysql root 用户密码搞混了,我看你用 sudo 执行密码还输错了两次
mysql 我装的时候没设密码,直接回车的
sudo apt-get install mysql-server mysql-common
运行完这个 mysql 服务应该不会自动启动吧
总感觉你那些地方存在了误解。。
error:Access denied for user ‘root’@‘localhost’ 这个报错是你在用 mysql 的的 root 用户去连接 mysql 的时候,因为密码或者权限的原因,被 MySQL 拒绝了,密码是 mysql 内用户的密码,而不是系统层面的用户的密码
大家说了好多,我基本上都一个个试了,但是就是不行,后来我把 MySQL 卸了然后重装,然后设置了密码(之前装的时候没设密码,直接回车的,后来设了密码),然后就可以直接 mysql -u root -p 访问了
挖个坟,找到解释了,且亲测有效 [解决 msyql 需要 sudo 连接的问题
]( https://chengfeng.site/2018/06/02/%E8%A7%A3%E5%86%B3%E6%96%B0%E5%AE%89%E8%A3%85%E7%9A%84msyql%E9%9C%80%E8%A6%81sudo%E8%BF%9E%E6%8E%A5%E7%9A%84%E9%97%AE%E9%A2%98/)

