MySql
创建用户并赋权
创建数据库
# 登录
mysql -u root -p
# 新建一个数据库 testdb
create database testdb;
use testdb;
# 创建t_user_info表
create table t_user_info(
id int(11),
name varchar(64),
age int(11)
)
# 查看系统用户信息
# 系统信息存储在mysql数据库中
use mysql;
select * from user;
从上图可以看到,会列出数据库所有的用户及权限
创建用户
CREATE USER 'user_name'@'host' IDENTIFIED BY 'password';
-
user_name
:要创建用户的名字。 -
host
:表示要这个新创建的用户允许从哪台机登陆,如果只允许从本机登陆,则 填'localhost'
,如果允许从远程登陆,则填'%'
-
password
:新创建用户的登陆数据库密码,如果没密码可以不写。
例:
#表示创建的新用户,名为aaalxf这个新用户密码为lxf_password,只允许本机登陆
CREATE USER 'lxf'@'localhost' IDENTIFIED BY 'lxf_password';
#表示新创建的用户,名为lxf_2,这个用户密码为lxf_password,可以从其他电脑远程登陆mysql所在服务器
CREATE USER 'lxf_2'@'%' IDENTIFIED BY 'lxf_password';
#表示新创建的用户lxf_3,没有密码,可以从其他电脑远程登陆mysql服务器
CREATE USER 'lxf_3'@'%';
再用 select * from user
查看用户列表:
可以看出 有 lxf
用户了。但是可以看到 lxf
的权限很多都是N
,表示没有权限,因为还要为用户授予权限。
授权用户
命令:GRANT privileges ON databasename.tablename TO 'username'@'host'
-
privileges
:表示要授予什么权力,例如可以有select , insert ,delete,update
等,如果要授予全部权力,则填ALL
-
databasename.tablename
:表示用户的权限能用在哪个库的哪个表中,如果想要用户的权限很作用于所有的数据库所有的表,则填*.*
,*
是一个通配符,表示全部。 -
'username'@'host'
:表示授权给哪个用户
例:
# mysql -u test -h 115.28.203.224 -p
#表示给用户lxf授权,让lxf能给testdb库中的t_user_info表 实行 insert 和 select
GRANT select,insert ON testdb.t_user_info TO 'lxf'@'%';
#表示给用户lxf授权,让lxf能给所有库所有表实行所有的权力。
GRANT ALL ON *.* TO 'lxf' @ '%';
#再看用户列表,可以发现权限都变成 Y了。
GRANT ALL ON *.* TO 'lxf'@'%'
注意:
用以上命令授权的用户不能给其他用户授权,如果想这个用户能够给其他用户授权,就要在后面加上 WITH GRANT OPTION
如: GRANT ALL ON *.* TO 'lxf'@'%' WITH GRANT OPTION;
刷新权限
使用这个命令使权限生效,尤其是你对那些权限表user、db、host
等做了update
或者delete
更新的时候。以前遇到过使用grant
后权限没有更新的情况,大家可以养成习惯,只要对权限做了更改就使用FLUSH PRIVILEGES
命令来刷新权限。
FLUSH PRIVILEGES;
查看权限
使用如下命令可以方便的查看到某个用户的权限:
SHOW GRANTS FOR 'lxf_1'@'localhost';
删除用户
注意删除用户不要使用DELETE
直接删除,因为使用DELETE
删除后用户的权限并未删除,新建同名用户后又会继承以前的权限。正确的做法是使用DROP USER
命令删除用户
命令:DROP USER 'user_name'@'host'
例:
# 表示删除用户lxf
DROP USER 'lxf'@'%';
#删除'lxf'@'192.168.100.*'
DROP USER 'lxf'@'192.168.100.*';
设置与更改用户密码
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
#设置当前用户的密码 SET PASSWORD = PASSWORD('123456')
SET PASSWORD = PASSWORD('newpassword');
撤销用户权限:
命令:REVOKE privileges ON database.tablename FROM 'username'@'host';
例如: REVOKE SELECT ON *.* FROM 'lxf'@'%';
但注意:
-
若授予权利是这样写:
GRANT SELECT ON *.* TO 'lxf'@'%';
则用REVOKE SELECT ON testdb.t_user_info TO 'lxf'@'%';
是不能撤销用户lxf
对testdb.t_user_info
中的SELECT
权利的。 -
反过来
GRANT SELECT ON testdb.t_user_info TO 'lxf'@'%';
授予权力
用REVOKE SELECT ON *.* FROM 'lxf'@'%';
也是不能用来撤销用户lxf
对testdb
库的t_user_info
表的SELECT
权利的