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的用户权限问题
32 回复

虽然我没用过乌班图,但是你可能对启动有什么误解。


这个问题我遇到过,核心是要用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"]
    )

几个关键点:

  1. GRANT语句是核心,语法是GRANT 权限 ON 数据库.表 TO '用户'@'主机'
  2. FLUSH PRIVILEGES让权限更改立即生效
  3. 常用权限包括:SELECT, INSERT, UPDATE, DELETE, CREATE, DROP等
  4. *.*表示所有数据库的所有表

如果你需要更细粒度的控制,比如只给某个表的特定权限,可以这样:

# 只给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 访问了

回到顶部