为什么要创建不同的用户呢?
因为root
用户权限太大,为了安全起见,创建不同的用户,并赋予不同的权限,可以有效保证数据库的安全。
mysql -u root -p
若
mysql -u root -p
后面加密码的话,-p
和密码之间不能有空格
如密码是:123456应写成mysql -u root -p123456
,否则会报错
mysql> create user admin identified by '123456';
Query OK, 0 rows affected (0.00 sec)
admin
即为新用户的用户名
123456
即为新用户的登录密码
语法:
GRANT <权限>[, <权限>]…[ON <对象类型><对象名>]
TO <用户> [, <用户>] [ WITH GRANT OPTION];
若在授权语句中指定了WITH GRANT OPTION
子句,那么,获得了权限的用户还可以将该权限赋予其他用户。
# 将 Student 表的插入权限赋予用户 UserA,并允许其将该权限授予他人
GRANT INSERT ON TABLE Student TO UserA WITH GRANT OPTION;
# 将 myweb 数据库的所有权限赋予 admin,赋予所有IP远程登陆的权限
mysql> grant all privileges on myweb.* to 'admin'@'%';
Query OK, 0 rows affected (0.00 sec)
myweb
即为指定的数据库
%
即表示无论此用户以哪个IP操作都可以操作
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
通过show grants
命令查看权限授予执行的命令:
mysql> show grants for 'admin';
+--------------------------------------------------+
| Grants for admin@% |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin'@'%' |
| GRANT ALL PRIVILEGES ON `myweb`.* TO 'admin'@'%' |
+--------------------------------------------------+
2 rows in set (0.00 sec)
此时admin
用户已经拥有了对myweb
数据库的所有权限。
再次验证admin
用户是否已经拥有了myweb
数据库的所有权限。
mysql> select User,Db,host,Select_priv,Insert_priv,Update_priv,Delete_priv from mysql.db where User='admin';
+-------+-------+------+-------------+-------------+-------------+-------------+
| User | Db | host | Select_priv | Insert_priv | Update_priv | Delete_priv |
+-------+-------+------+-------------+-------------+-------------+-------------+
| admin | myweb | % | Y | Y | Y | Y |
+-------+-------+------+-------------+-------------+-------------+-------------+
1 row in set (0.00 sec)
此时admin
登录成功
查看所有的数据库,只有myweb
库可用
对比root
帐户,myweb
库只是其中之一
删除用户权限可以通过语句revoke完成
Revoke permission on ‘database’,’tables’ from ‘username’@’host’
# 收回用户 admin 远程登录的 myweb 权限,只能以 192.168.*.* 登录;
mysql> revoke drop on myweb.* from admin@'192.168.%.%';
# 收回用户 admin 本地登录的 myweb 权限,如下几种写法均可;
mysql> revoke select,create,delete,grant option on myweb.* from 'admin'@'localhost';
mysql> revoke all privileges,grant option from 'admin'@'localhost';
mysql> revoke all privileges on myweb.* from 'admin'@'localhost';
mysql> revoke grant option on myweb.* from 'admin'@'localhost';
# 给admin用户添加对goods的所有权限,赋予远程登陆的权限
grant all privileges on goods.* to 'admin'@'%';
# 给admin用户添加对goods的所有权限,赋予本地登录的权限
grant all privileges on goods.* to 'admin'@'localhost';
# 修改 admin 的本地登录密码为 abcdef
mysql> alter user 'admin'@'localhost' identified by 'abcdef';
Query OK, 0 rows affected (0.00 sec)
# % 代表任意 ip,localhost 代表只有本地能登录
# 修改 admin 远程登录密码为 abcdef
mysql> set password for 'dayi'@'%'=password('abcdef');
Query OK, 0 rows affected (0.00 sec)
select user,host from mysql.user;
mysql> DROP USER 'admin'@'%';
Query OK, 0 rows affected (0.00 sec)
针对文章可能存在的一些不足之处,请大佬指出,经核实以后会尽快对文章进行修改,感谢您的支持!!!
参考资料