您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
19_DCL_管理权限
发布时间:2022-07-15 22:14:57编辑:雪饮阅读()
本文环境:
Mysql5.7.26
忘记密码怎么找回?
(1)--skip-grant-tables运行mysqld会话窗口
C:\Users\Administrator>D:\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysqld --skip-grant-tables
(2)另开会话窗口免密登录后进行修改
登录时候-p后直接回车,不输出密码即可进入
然后执行命令如:
use mysql;
update user set authentication_string = password('1111111'), password_expired = 'N', password_last_changed = now() where user = 'root';
(3)关掉第一步中所运行的会话窗口并在任务管理器中杀死其进程。
(4)重启mysqld,然后和之前一样正常操作即可。
如何创建一个新用户?
mysql> create user user001;
Query OK, 0 rows affected (0.00 sec)
如何查看用户列表?
mysql> select host,user from mysql.user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| % | user001 |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+---------------+
5 rows in set (0.00 sec)
如何给用户授权?如何给用户设置密码?
mysql> grant select,insert on *.* to 'user001' identified by 'user001';
Query OK, 0 rows affected, 1 warning (0.00 sec)
这里给user001用户授予了select和insert的权限于任何数据库的任何表(*.*)并附带设置了密码为user001
如何仅给用户授权?如何给指定某个主机host对应的用户授权?(相同用户名可能有不同的host)。
mysql> grant all on *.* to 'user001'@'%';
Query OK, 0 rows affected (0.00 sec)
这里给user001用户且主机类型为”%”的这条记录(用户)授权了所有权限于所有数据库的所有表。
如何查看一个用户有多少权限?
mysql> show grants for 'user001'@'%';
+----------------------------------------------+
| Grants for user001@% |
+----------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user001'@'%' |
+----------------------------------------------+
1 row in set (0.00 sec)
直接创建一个用户不授权时候,则默认权限是什么?
mysql> create user user003;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user from mysql.user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| % | user001 |
| % | user002 |
| % | user003 |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+---------------+
7 rows in set (0.00 sec)
mysql> show grants for 'user003'@'%';
+-------------------------------------+
| Grants for user003@% |
+-------------------------------------+
| GRANT USAGE ON *.* TO 'user003'@'%' |
+-------------------------------------+
1 row in set (0.00 sec)
可见其权限是usage。
如何撤销某个用户的某个权限?
先看看某个用户user001当前的权限
mysql> show grants for 'user001';
+----------------------------------------------+
| Grants for user001@% |
+----------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user001'@'%' |
+----------------------------------------------+
1 row in set (0.00 sec)
然后我撤销他的select权限
mysql> revoke select on *.* from 'user001'@'%';
Query OK, 0 rows affected (0.00 sec)
这里撤销了用户select权限在任何库和任何表中且user001为%类主机上的权限。
有个小坑。
你撤销授权的时候数据库与表的范围好像是要和之前授予权限的时候是要一致的。
mysql> revoke select on test.* from 'user001'@'%';
ERROR 1141 (42000): There is no such grant defined for user 'user001' on host '%'
像是我这样就报错了。
如何撤销某个用户的多个权限?
mysql> revoke select,insert on *.* from 'user001'@'%';
Query OK, 0 rows affected (0.00 sec)
关键字词:DCL,权限