• 用户管理【MySQL】


    查看用户信息

    在名为mysql数据库中有一个表user维护着 MySQL 的用户信息。

    image-20240227164127584

    其中:

    • user: 表示该用户的用户名。
    • host: 表示该用户可以从哪个主机登录,localhost 表示只能从本机登录(127.0.0.1),% 表示可以从任意地方登录。
    • authentication_string: 表示该用户的密码经过 password 函数加密后的值。
    • xxx_priv: 表示该用户是否拥有对应权限。

    其中 password 函数可以对参数进行摘要。

    尝试查看它们的值:

    image-20240227164314212

    由于 user 表中 Host 和 User 属性共同作为联合主键,所以只要用户名和主机 IP 的组合唯一即可,这是合理的,一台主机可能有多个用户。

    MySQL 的所有用户管理工作都通过 user 表来进行,实际上,后续所有的用户操作都会被 MySQL 解析为 SQL 来执行,并且允许用户直接通过 SQL 对 user 表修改。例如通过 INSERT 添加用户,UPDATE+password 函数来修改用户密码登操作,都是可行的。但是这只能作为特殊情况的补救措施,因为这么做有风险。

    创建用户

    SQL:

    CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';
    
    • 1

    如果你设置的密码过于简单,由于 MySQL 的密码策略等级,会出现以下错误:

    Your password does not satisfy the current policy requirements
    
    • 1

    通过SHOW VARIABLES LIKE 'validate_password%';查看密码策略,从而设计符合条件的密码。

    image-20240227170352013

    或者修改密码策略:

    set global validate_password_policy=0;
    set global validate_password_length=1;
    
    • 1
    • 2

    创建用户:

    create user 'new_user'@'%' identified by '12345';
    
    • 1
    image-20240227170511859

    现在可以以新用户的身份登录 MySQL:

    mysql -unew_user -p
    
    • 1

    登录后可以查看客户端信息:

    image-20240227170751017

    由于%表示允许来自任何主机的用户登录,所以在远端登录 MySQL 的方式也是一样的。需要注意的是,可能在连接时会不被允许,这可能是服务端主机没有开放 3306(MySQL 服务器)端口,为了测试可以在/etc/mysql.cnf修改 MySQL 的端口配置为测试端口如 8080。实际应用中,数据库不对外开放而只在内网中使用。

    修改密码

    用户自己修改密码:

    set password=password('新密码');
    
    • 1

    超级用户修改任意用户的密码:

    set password for '用户名'@'登录主机'=password('新密码');
    
    • 1

    删除用户

    SQL:

    DROP USER '用户名'@'登录地址';
    
    • 1

    注意,如果不指明待用户的登录地址,则默认删除的是登录地址为 % 的用户。

    授予权限

    MySQL 数据库提供的权限如下:

    权限列名上下文
    CREATECreate_priv数据库、表或索引
    DROPDrop_priv数据库或表
    GRANT OPTIONGrant_priv数据库、表或保存的程序
    REFERENCESReferences_priv数据库或表
    ALTERAlter_priv
    DELETEDelete_priv
    INDEXIndex_priv
    SELECTSelect_priv
    UPDATEUpdate_priv
    CREATE VIEWCreate_view_priv视图
    SHOW VIEWShow_view_priv视图
    ALTER ROUTINEAlter_routine_priv保存的程序
    CREATE ROUTINECreate_routine_priv保存的程序
    EXECUTEExecute_priv保存的程序
    FILEFile_priv服务器主机上的文件访问
    CREATE TEMPORARY TABLESCreate_tmp_table_priv服务器管理
    LOCK TABLESLock_tables_priv服务器管理
    CREATE USERCreate_user_priv服务器管理
    PROCESSProcess_priv服务器管理
    RELOADReload_priv服务器管理
    REPLICATION CLIENTRepl_client_priv服务器管理
    REPLICATION SLAVERepl_slave_priv服务器管理
    SHOW DATABASESShow_db_priv服务器管理
    SHUTDOWNShutdown_priv服务器管理
    SUPERSuper_priv服务器管理

    新创建的用户没有任何权限,创建用户后需要给用户授权。

    GRANT 权限列表 ON 库名。对象名 TO '用户名'@'登录地址' [IDENTIFIED BY '密码'];
    
    • 1

    其中:

    • '用户名'@'登录地址':表示给哪一个用户授权。
    • 库名。对象名:表示要授予用户哪个数据库下的哪个对象的权限。
    • 权限列表:表示要授予用户何种权限,多个权限之间用逗号隔开。
    • IDENTIFIED BY '密码'可选:如果用户存在,则在授予权限的同时修改该用户的密码,如果用户不存在,则创建该用户。

    例如授予用户new_usercurd_db数据库下所有对象的select权限:

    grant select on curd_db.* to 'new_user'@'%' identified by '12345';
    
    • 1

    这样新用户就能看到 curd_db 这个数据库了。

    image-20240227172042611

    查看用户的权限:

    image-20240227172310098

    其中:

    • 创建用户后该用户默认会有 USAGE 权限,该权限只能用于数据库登录,不能执行任何操作。
    • *.*表示所有数据库的所有对象,库名。*表示某个数据库的所有对象(表、视图、存储过程等)。
    • information_schema 数据库保存的了 MySQL 服务器所维护的所有其他数据库的信息。新用户默认只能看到它。

    但是目前只有 select 权限,不能对数据库内容做修改。授予new_usercurd_db数据库下以所有权限:

    grant all on curd_db.* to 'new_user'@'%';
    
    • 1

    收回权限

    REVOKE 权限列表 ON 库名。对象名 FROM '用户名'@'登录地址';
    
    • 1
    image-20240227172947228

    注意:

    • 回收用户在某一数据库下的权限后,在该用户下一次进入该数据库时才会起作用。
    • 如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限。
  • 相关阅读:
    leetcode:774. 最小化去加油站的最大距离【经典二分check】
    基于ssm旅社客房收费管理系统+vue
    Redis数据库持久化
    labview与stm32通信
    React跨路由组件动画
    “合”而不同,持“智”以恒,幂律智能2022产品升级发布会全程回顾!
    1.2 Hadoop简介-hadoop-最全最完整的保姆级的java大数据学习资料
    机器学习 周志华 第一章课后习题
    7个技巧帮助你进行更有吸引力的脉动/脉搏调查
    C/C++-指针
  • 原文地址:https://blog.csdn.net/m0_63312733/article/details/136606682