data control language,DCL
,数据控制语言,主要是对数据库中的登录和用户的权限进行控制的语言,包含
MySQL
数据库revoke
1. 查看数据库中的用户及信息
mysql -uroot -p
show databases;
use mysql;
show tables;
select user, host, passord from user; # 所有的用户都在user表中
2. 创建新用户、授权、撤销权限和删除
-- 创建
create user "test"@"192.168.2.10" identified by"password"; # 指定用户test、ip和密码password
flush privileges; # 刷新权限
mysql -utest -h192.168.2.10 -p # 用test用户登录
-- 授权
grant select, insert, delete on shop.* to "test"@"192.168.2.10"; # shop 是数据库,test是数据库中的表
flush privileges; # 刷新权限
systemctl restart mysql; # 重启mysql
-- 创建用户的同时进行授权
grant select, insert, delete on shop.* to "test"@"192.168.2.10" identified by"password";
-- 查看权限
show grants for "test"@"192.168.2.10"\G # \G参数是为了输出好看
-- 撤销权限
revoke delete on shop.* to "test"@"192.168.2.10"; # 撤销shop数据库中test用户的delete权限
flush privileges; # 刷新权限
systemctl restart mysql; # 重启mysql
-- 删除用户
drop user "test"@"192.168.2.10";
-- 谨慎操作
grant all privileges on *.* to "test"@"192.168.2.10" # 将所有的权限给所有数据库
3. 修改用户密码
-- 已知用户原密码,能够进行登录
mysql -uroot -p
show databases;
use mysql;
show tables;
select user, host, password from user; # 所有的用户都在user表中
update user set password=PASSWORD("123456admin") where user="test"; # 将test用户的密码改成123456admin
flush privileges;
-- 忘记原来的密码:借助跳跃权限表,重启守护进程
mysql skip-grant-tables # 跳跃权限表
mysql # 重新进入mysql
show databases;use mysql;show tables;
select user, host, password from user; # 所有的用户都在user表中
update user set password=PASSWORD("123456admin") where user="test"; # 将test用户的密码改成123456admin
flush privileges;
4. 查看mysql服务
-- window
直接去任务管理器
-- linux
netstat -an # 找到3306端口
root
账户默认情况下,MySQL
数据库是指允许root
账户登录并且在本机上登录的。
-uroot
表示root
账户-p
表示需要密码-h
表示默认是本机localhost
或者127.0.0.1
登录MySQL
数据库的服务端口号是3306
,通过在mysql
数据库的user
表中查看登录数据库用户信息:
mysql> show databases; # 查看所有的数据库
mysql> use mysql; # 选择mysql数据库
mysql> show tables; # 查表数据库中的所有表
mysql> select user, host from user; # 查看这个表中的user和host信息
需要注意的是删除了某个用户之后必须进行权限的刷新:
mysql> delete from user where host="%"; # 删除host为%的用户
Query OK, 1 row affected (0.01 sec)
mysql> flush privileges; # 刷新权限
Query OK, 0 rows affected (0.00 sec)
注意:当在实际的开发项目中,项目和数据库服务器不再同一个地方,可以指定ip连接进行访问。
mysql> update user set host="192.168.1.10" where user="root";
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select user,host from user;
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
当退出mysql
重新进入,需要指定IP
地址,就是上面设置的IP
:
同样需要进入mysql
数据库的user
表中
mysql>update user set password=PASSWORD("admin") where user="root"; # 将root账户的密码改为admin
mysql> flush privileges; # 更新操作
Query OK, 0 rows affected (0.00 sec)
ubuntu@peter:~$ vim /etc/mysql/mysql.conf.d/mysqld.cnf
skip-grant-tables
,将前面的#去掉,就是取消注释:取消权限认证,后台开启新的进程免密进入MySQL
MySQL
服务:systemctl restart mysql
MySQL
直接进入: mysql> show databases;
mysql> use mysql;
mysql> select user, password from user;
# 接下来重新设置密码即可
mysql
数据库后,创建一个test
用户,并且刷新权限:msyql>update user set host="% where user="test" ; # 谨慎操作
select、insert、delete
等操作权限授权给新建的用户test
mysql
数据库中,选中peter
这个数据库中,创建一个test
表create
权限成功insert
和select
权限成功谨慎操作
grant all privileges on *.* to "test"@"192.168.21.136";
撤销权限使用的是revoke
;承接上面的栗子,撤销test
用户的select
权限:
revoke
:撤销select
:即将撤销的权限peter
:从哪个数据库中撤销revoke select on peter.* from "test"@"192.168.21.136";
撤销权限一定要通过root账户进入MySQL;否则出现权限不足的问题
show grants for 用户名@IP地址;
drop user 用户名@IP地址;