目录
Mysql用户管理
mysql中的用户,都存储在系统数据库mysql中user表中
其中user表的重要字段说明:
1. host:允许登录的“位置”,localhost表示该用户只允许本机登录,也1.host:可以指定ip地址,比如:192.168.1.100
2. user:用户名;
3. authentication_string:密码,是通过mysql的password0函数加密之后的密码。
创建用户
create user '用户名' @' 允许登录位置’ identified by '密码'
说明:创建用户,同时指定略马
删除用户
drop user '用户名' @' 允许登录位置'
用户修改密码
修改自己的密码:
set password = password('密码');
修改他人的密码(需要有修改用户路码权限):
set password for '用户名'@"登录位置’ = password('密码');
实例:
创建新用户
create user 'cc'@'localhost' identified by '123456'
查看用户权限
create user 'cc'@'localhost' identified by '123456'
登陆新用户
此时可发现用户cc所能看到的表与拥有最高权限(root)的xc的表不同
不同的数据库用户,登录到DBMS后,根据相应的权限,可以操作的数据库和数据对象(表,视图,触发器)都不一样
MySQL权限管理
权限 | 意义 |
ALL (PRIVILEGESI | 设置除GRANT OPTION之外的所有简单权限 |
ALTER | 允许使用ALTER TABLE |
ALTER ROUTINE | 更改或取消已存储的子程序 |
CREATE | 允许使用CREATE TABLE |
CREATE ROUTINE | 创建已存储的子程序 |
CREATE TEMPORARYTABLES | 允许使用CREATE TEMPORARY TABLE |
CREATE USER | 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES |
CREATE VIEW | 允许使用CREATE VIEW |
DELETE | 允许使用DELETE |
DROP | 允许使用DROP TABLE |
EXECUTE | 允许用户运行已存储的子程序 |
FILE | 允许使用SELECT...INTO OUTFILE和LOAD DATA INFILE |
INDEX | 允许使用CREATE INDEX和DROP INDEX |
INSERT | 允许使用INSERT |
LOCK TABLES | 允许对您拥有SELECI权限的表使 LOCKTABLES |
PROCESS | 允许使用SHOW FULL PROCESSLIST |
REFERENCES | 未被实施 |
RELOAD | 允许使用FLUSH |
REPLICATIONCLIENT | 允许用户询问从属服务器或主服务器的地址 |
REPLICATION SLAVE | 用于复制型从属服务器(从主服务器中读取二进制日志事件) |
SELECT | 允许使用SELECT |
SHOW DATABASES | SHOW DATABASES显示所有数据库 |
SHOW VIEW | 允许使用SHOW CREATE VIEW |
SHUTDOWN | 允许使用mysqladmin shutdown |
SUPER | KILL,PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections |
UPDATE | 允许使用UPDATE |
USAGE | “无权限”的同义词 |
GRANT OPTION | 允许授予权限 |
给用户授权
基本语法:
grant 权限列表 on 库.对象名 to '用户名’@’登录位置‘【identified by'密码’】
说明:
1. 权限列表,多个权限用运号分开
grant select on.......
grant select, delete, create on ....
grant all 【privileges】on ...//表示赋予该用户在该对象上的所有权限
2. 特别说明
* . *:代表本系统中的所有数据库的所有对象(表,视图,存储过程)
库.*:表示某个数据库中的所有数据对象(表,视图,存储过程等)
3. identified by可以省略,也可以写出.
(1)如果用户存在,就是修改该用户的密码
(2)如果该用户不存在,就是创建该用户!
回收用户授权
基本语法:
revoke 权限列表 on库对象名 from '用户名'@'登陆位置'
权限生效指令
如果权限没有生效,可以执行下面命令基本语法:
FLUSH PRIVILEGES;
实例1:
创建数据库test1,并创建表news
create table news(
id int,
`name` varchar(32)
);
insert into news
VALUES(1,'JACK')
SELECT * FROM news
给用户cc参考test1表和select/insert权限
grant select,insert
ON test1.news
to 'cc'@'localhost'
select * from news
insert into news
VALUES(2,'MIKE')
如图所示,用户cc可以看到test1数据库和news表,并且可以进行select/insert相关操作
实例2:
现在进行数据更新操作
update news set `name` = 'lili'
where id = 200
如图所示可以看出,用户cc只能进行被授权的操作(select/insert)
此时在xc用户的视角下观察news表
由图可知,news的数据也进行了改动
修改用户cc的密码为abc
SET PASSWORD FOR 'cc'@'localhost' = PASSWORD('abc')
回收cc用户在test1.news表的全部权限
revoke all on test1.news from 'cc'@'localhost'
或
revoke select,insert,update on test1.news from 'cc'@'localhost'
此时再次刷新cc用户的视角
可以发现,cc用户已经没有对test1.cc的相关权限
细节说明
1. 如果不指定Host,则为%,%表示表示所有IP都有连接权限在创建用户的时候,create user xxX
creat user '用户'
2. 你也可以这样指定
create user 'xxx'@'192.168.1.%'表示 xxx用户在 192.168.1.*的ip可以登录mysql
3. 在删除用户的时候,如果 host 不是 %,需要明确指定用户'@'host值'