MySQL操作基础之DCL语句,用户权限管理

✍️Auth:star皆空       Date:2022/02/16       Cat:MySQL       👁️:490 次浏览

DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和
访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的 语句关键字包括grant、revoke 等。

DCL 语句主要是DBA 用来管理系统中的对象权限时所使用,一般的开发人员很少使用。

1:创建用户CREATE USER

示例:创建只能本地登录(localhost)的账号zhangsan,密码为mypass

CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY 'mypass';

2: GRANT给用户授权

注:mysql8.0以前的版本可以使用grant在授权的时候隐式的创建用户,8.0以后已经不支持,所以必须先创建用户,然后再授权

创建用户并授权,语法格式(8.0以前版本):

GRANT [权限] ON [数据库.数据表] TO [用户名] @host IDENTIFIED BY [‘密码’]  [WITH GRANT OPTION(可选参数)];
  • [权限]: select,insert ,update,delete,drop,create等,all(所有操作)
  • [数据库.数据表]:testDatebase.* (testDatebase中所有表),testDatebase.myTable (testDatebase中的myTable表),*(所有数据库)
  • host:localhost(本地登录),12.32.123.54(仅限此IP可登录),%(任何地方都可以登录)
  • with gran option:表示该用户可给其它用户赋予权限,但不可能超过该用户已有的权限。
    比如a用户有select,insert权限,也可给其它用户赋权,但它不可能给其它用户赋delete权限,除了select,insert以外的都不能。

示例:
8.0以前版本创建用户授权一步到位。

GRANT all ON testDatebase.myTable TO 'zhangsan'@localhost IDENTIFIED BY 'mypass;
#创建用户zhangsan,密码mypass,对于数据库testDatebase的myTable表,授予所有权限(all),仅限本地登录

8.0以后的版本,创建用户后,在授权操作。

grant all privileges on wordpress.* to 'userwordpress'@'%';
#userwordpress用户在wordpress所有表中有权限,可在任何地方登录使用。
grant select on testDatabase.myTable to 'zhangsan'@'localhost';
#zhangsan用户在testDatabase的myTable表中只有select权限,仅在本地登录。

3: REVOKE给用户撤销权限

格式:

REVOKE [权限] ON [数据库.数据表] FROM[用户名] @host;

示例:

revoke all privileges on testDatabase.* from 'zhangsan'@'%'; 
#撤销zhangsan在testDatabase数据库的所有权限
revoke insert on testDatabase.* from 'zhangsan'@localhost; 
#撤销zhangsan在testDatabase数据库的insert权限

4:查看权限命令

有两种方式查看。

第一种方式:

show grants for 'userwordpress';
mysql > show grants for 'userwordpress';                                                                                                                            
+--------------------------------------------------------------+
| Grants for userwordpress@%                                   |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `userwordpress`@`%`                    |
| GRANT ALL PRIVILEGES ON `wordpress`.* TO `userwordpress`@`%` |
+--------------------------------------------------------------+
2 rows in set
Time: 0.007s

第二种方式:

select * from mysql.user where user='userwordpress'\G;

\g 相当于’;’
\G使每个字段打印到单独的行,也有’;’的作用

只能查出哪个数据库的哪张表的权限,如查userwordpress在mysql数据库的user表的权限,显示都是N(no),没有权限,如果查root用户就都是Y(yes)选择了。

5:修改用户密码信息和host

修改密码两种方式:
1)Alter user

Alter user 'test1'@'localhost' identified by '新密码';

2)set password

set password for 'zhangsan'@'localhost'='1234567'    

3)8.0以前版本grant,8.0以后版本无法使用

grant all privileges on testDatabase.* to 'zhangsan'@localhost identified by 'newpassword';

修改host,访问IP:

update user set Host="%" where user='zhangsan'; 
#修改host为'%',任何IP都可访问
update user set Host="123.123.123.123" where user='zhangsan'; 
#修改host为'%',IP:123.123.123.123可访问

6:删除用户

drop user 'zhangsan'@'%'
打赏作者

发表评论