数据控制语言(DCL)

用户管理

1.登录mysql服务器
  • 语法

    mysql -h hostname -P port -u username -p
    
  • 参数含义

    • -h hostname:指定要连接的数据库服务器的主机名或 ip 地址。
    • -P port:指定要连接的数据库服务器的端口号,默认为 3306。
    • -u username:指定要使用的用户名。
    • -p:表示需要输入密码进行身份验证。
2.创建用户
  • 语法

    # 创建一个用户
    create user 'username'@'hostname' indentified by 'password';
    
    #同时创建多个用户
    create user 
    	'user1'@'host1' indentified by 'password1', 
    	'user2'@'host2' indentified by 'password2';
    
  • 各个部分的含义

    • username:要创建的用户名。
    • hostname:指定用户可以从哪个主机连接到 MySQL 服务器。可以是具体的主机名或 IP 地址,也可以使用通配符 % 表示任意主机。
    • password:用户的登录密码。
  • 示例

    # 使用默认的host
    create user jojo identified by '123456'; # 默认host是%
    # 使用指定的host
    create user 'dio'@'localhost' identified by '123456';
    
3.查看用户
  • 查看所有用户

    select user, host from mysql.user;
    
  • 查看指定用户

    select user, host from mysql.user where user = 'xxxx' \g;
    
  • 查看当前登录用户

    select user();
    select current_user();
    
4.修改用户
  • 修改当前用户密码

    alter user user() identified by 'new_password';
    # 或
    set password = 'new_password';
    
  • 修改其它用户密码

    alter user 'username'@'hostname' indentified by 'new_password';
    # 或
    set password for 'username'@'hostname'='new_password';
    
5.修改用户名或主机名
  • 修改用户名

    rename user 'old_username'@'hostname' to 'new_username'@'hostname';
    
    # 示例
    rename user 'zhangsan' to 'lisi';
    
  • 修改主机名

    update mysql.user set host = 'new_hostname' where user = 'username' and host = 'old_hostname';
    flush privileges;
    
6.删除用户
  • 使用 DROP USER 语句删除用户:

    • 语法

      drop user 'username'@'hostname';
      
      # 示例
      drop user 'john'@'localhost';
      
    • 注意

      • 使用 drop user 语句来删除用户时,必须拥有 drop user 权限。
      • 删除用户后,相关的权限和用户数据也将被删除。
  • 使用 DELETE FROM 语句从 mysql.user 表中删除用户:

    • 语法

      delete from mysql.user where user = 'username' and host = 'hostname';
      flush privileges;
      
      #示例
      delete from mysql.user where host='localhost' and user='zhangsan';
      flush privileges;
      
    • 注意

      • 执行完 delete命令后要使用 flush 命令来使用户生效。
      • 需要 DELETE USERDELETE 表权限。

权限管理

1.权限列表
  • 可以通过show privileges;来查看前线列表

  • 常用权限及介绍如下

    ALL PRIVILEGES:拥有所有权限。
    SELECT:允许选择(查询)表中的数据。
    INSERT:允许向表中插入新数据。
    UPDATE:允许修改表中已有的数据。
    DELETE:允许从表中删除数据。
    CREATE:允许创建新的数据库或表。
    DROP:允许删除数据库或表。
    ALTER:允许修改表结构。
    GRANT OPTION:允许将权限授予其他用户或角色。
    EXECUTE:允许执行存储过程或函数。
    SHOW DATABASES:允许查看数据库列表。
    SHOW VIEW:允许查看视图的定义。
    FLUSH PRIVILEGES:刷新权限,使新授予的或更改的权限生效。
    
2.授予权限的原则
  • 只授予能满足需要的最小权限,保证安全性。
  • 创建用户的时候,限制用户的登录主机,一般是限制成指定 IP 或者内网 IP 段。
  • 为每个用户设置满足密码复杂度的密码。
  • 定期清理不需要的用户,回收权限、删除或锁定用户。
3.授予权限
  • 在 MySQL 中,可以使用 GRANT 命令为用户或角色授予权限。

  • 基本语法

    grant privileges on database.table to 'username'@'hostname';
    
  • 各部分含义

    • privileges:表示要授予的具体权限,可以是一个或多个权限,多个权限之间用逗号分隔。
    • database.table:表示所授权的数据库和表名。可以使用 * 通配符来表示所有数据库或表。
    • 'username'@'hostname':表示要授予权限的用户或角色和其主机。用户名和主机名可以使用通配符 % 来表示所有主机。
  • 示例

    # 给 lisi 用户用本地命令行方式,授予 northwind 这个库下的所有表的插删改查的权限
    grant select, insert, delete, update on northwind.* to 'lisi'@'localhost';
    
4.关于权限设置
  • 我们在开发应用时,需要根据不同用户,在两个维度上进行权限设置。
  • 指定用户可以接触到的数据范围:比如,可以看到哪些表的数据
  • 指定用户对接触到的数据能访问到什么程度:比如,查看、增加、修改、删除
5.查看权限
  • 查看当前用户权限

    show grants;
    # 或者
    show grants for current_user;
    # 或者
    show grants for current_user();
    
  • 查看某用户的权限

    # 查看某用户的权限
    show grants for 'username'@'hostname';
    
6.收回权限
  • 在将用户账户从 user 表删除之前,应该收回相应用户的所有权限。

  • 可以使用 REVOKE 命令来收回用户或角色的权限。

  • 基本语法

    revoke privileges on database.table from 'username'@'hostname';
    
  • 示例

    # 给 lisi 用户用本地命令行方式,收回 northwind 这个库下的所有表的插删改查的权限
    revoke select, insert, delete, update on northwind.* to 'lisi'@'localhost' ;
    

今夜落花有诗意,怎奈昔日流水无情。 ——刺猬乐队《光阴·流年·夏恋》

你可能感兴趣的:(数据库,数据库,sql,mysql,开发语言)