Mysql——权限管理

一、MySQL权限如下表

 

权限名字权限说明Context
CREATE允许创建新的数据库和表Databases, tables, or indexes
DROP允许删除现有数据库、表和视图Databases, tables, or views
GRANT OPTION能够把自己获得的权限转赠给其他用户一个副本Databases, tables, or stored routines
LOCK TABLES允许使用显式锁表的语句锁表,前提是你必须有SELECT权限Databases
REFERENCESMySQL 5.7.6之前引用特权是未使用的。5.7.6,创建一个外键约束需要引用父表的特权。Databases or tables
EVENTThe EVENT privilege is required to create, alter, drop, or see events for the Event Scheduler.Databases
ALTER允许修改权限或重命名表Tables
DELETE允许从表中或数据库中删除行Tables
INDEX允许创建或删除索引Tables
INSERT允许在表和数据库中插入行Tables or columns
SELECT允许在表和数据库这查询行Tables or columns
UPDATE允许在表和数据空中更新行Tables or columns
CREATE TEMPORARY TABLES允许创建和使用临时表Tables
TRIGGER允许使用触发器相关,前提是你必须拥有这个表的CREATE、DROP、EXECUTE或者Display权限Tables
CREATE VIEW允许使用CREATE VIEW语句Views
SHOW VIEW允许使用SHOW VIEW语句Views
ALTER ROUTINEALTER ROUTINE允许你修改存储过程(过程或函数)前提是你需要在存储过程上拥有ALTER或DROP权限Stored routines
CREATE ROUTINEALTER ROUTINE允许你创建存储过程(过程或函数)前提是你需要在存储过程上拥有ALTER或DROP权限Stored routines
EXECUTE允许你执行存储过程(过程或函数)Stored routines
FILE文件读写权限允许你文件在服务器主机上使用LOAD DATA INFILE and SELECT 语句以及LOAD DATA()函数File access on server host
CREATE TABLESPACE允许创建表空间,前提是你需要CREATE、ALTER OR DROP tablespaces 以及属于log file 组Server administration
CREATE USER允许使用ALTER USER, CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES 语句Server administration
PROCESS允许使用SHOW PROCESSLIST or mysqladmin processlist看到线程属于其他账户,你总能看到自己的线程。PROCESS权限还允许使用SHOW ENGINE语句Server administration
PROXY Server administration
RELOAD允许使用FLUSH语句,以及mysqladmin命令中对于FLUSH的操作例如:flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, and reload.Server administration
REPLICATION CLIENT是否有权限去请求复制相关主数据库产生的事件的,允许显示的使用SHOW MASTER STATUS, SHOW SLAVE STATUS, and SHOW BINARY LOGS语句Server administration
REPLICATION SLAVE是否能够创建连接以复制的方式,连接至数据库服务器端Server administration
SHOW DATABASES允许使用SHOW DATABASES来查看所有数据库列表,如果没有这个权限则只能查看规定数据库Server administration
SHUTDOWN允许使用SHUTDOWN语句,mysqladmin shutdown命令,以及mysql_shutdown()API函数Server administration
SUPER超级特权可以用于终止其他会话或改变服务器运行。属于特别高级别的一类权限Server administration
USAGE无权限,当您想要创建一个没有权限的用户时,可以指定USAGEServer administration
ALL PRIVILEGES所有权限: ALL PRIVILEGES,可以简写为ALLServer administration

 

 

二、授权示例

1.1 登陆MYSQL,创建用户并授权

#mysql -uroot -p123456

mysql>grant  all  on  *.*  to  'demo'@'localhost'  identified  by  'demo' ;                      ##创建一个用户"demo"并对“localhost”上的所有                                                                                                                                          ##管有最高权限

1.2 创建用户对指定数据库的权限(ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE,DROP .... )

mysql>grant all  on demo.*  to  'demo'@'127.0.0.1'  identified  by  'demo' ;             ##demo用户对demo数据库有最高权限

mysql>grant select on  demo.*  to  'demo'@'127.0.0.1'   identified  by  'demo';       ##demo用户对demo数据库有select权限

mysql>grant delete on  demo.*  to  'demo'@'127.0.0.1'   identified  by  'demo';       ##demo用户对demo数据库有delete权限

mysql>grant update on  demo.*  to  'demo'@'127.0.0.1'   identified  by  'demo';     ##demo用户对demo数据库有update权限

mysql>grant create on  demo.*  to  'demo'@'127.0.0.1'   identified  by  'demo';      ##demo用户对demo数据库有create权限

mysql>grant drop  on  demo.*  to  'demo'@'127.0.0.1'   identified  by  'demo';       ##demo用户对demo数据库有drop权限

 

mysql>grant drop  on  demo.*  to  'demo'@'%'   identified  by  'demo';    ##demo用户对所有主机授权,可以在任何主机登陆

mysql>grant references on testdb.* to developer@'192.168.0.%';           ##允许developer对192.168.0.x有操作外键权限

mysql>grant create temporary tables on testdb.* to developer@'192.168.0.%';   ##允许developer对192.168.0.x有临时表权限

mysql>grant create index  tables on testdb.* to developer@'192.168.0.%';        ##允许developer对192.168.0.x有索引权限

mysql>grant create view tables on testdb.* to developer@'192.168.0.%';        ##允许developer对192.168.0.x,创建视图权限

mysql>grant show view  tables on testdb.* to developer@'192.168.0.%';        ##允许developer对192.168.0.x,查看视图权限

 

grant 操作 MySQL 存储过程、函数 权限。

mysql>grant create routine on testdb.* to developer@'192.168.0.%'; -- now, can show procedure status
mysql>grant alter routine on testdb.* to developer@'192.168.0.%'; -- now, you can drop a procedure
mysql>grant execute on testdb.* to developer@'192.168.0.%';

 

grant 普通 DBA 管理某个 MySQL 数据库的权限。

mysql>grant all privileges on testdb to dba@'localhost' ;                            ##其中,关键字 “privileges” 可以省略。

 

grant 高级 DBA 管理 MySQL 中所有数据库的权限。

mysql>grant all on *.* to dba@'localhost' ;

 

grant 作用在整个 MySQL 服务器上:

mysql>grant select on *.* to dba@localhost;                                                ##dba 可以查询 MySQL 中所有数据库中的表。
mysql>grant all on *.* to dba@localhost;                                                      ##dba 可以管理 MySQL 中的所有数据库

 

grant 作用在单个数据库上:

mysql>grant select on testdb.* to dba@localhost;                                     ##dba 可以查询 testdb 中的表。

 

grant 作用在单个数据表上:

grant select, insert, update, delete on testdb.orders to dba@localhost ;

 

这里在给一个用户授权多张表时,可以多次执行以上语句。例如:

grant select(user_id,username) on smp.users to mo_user@'%' identified by '123345';
grant select on smp.mo_sms to mo_user@'%' identified by '123345';

 

grant 作用在表中的列上:

grant select(id, se, rank) on testdb.apache_log to dba@localhost;

 

grant 作用在存储过程、函数上:

grant execute on procedure testdb.pr_add to 'dba'@'localhost'
grant execute on function testdb.fn_add to 'dba'@'localhost'

 

 

三、 查看用户及权限

mysql>show grants;                      ##查看当前用户权限

mysql>show grants for  'zabbix'@'localhost'            ##查看zabbix@'localhost'的权限

 

 

四、撤消已赋予Mysql的用户权限

mysql>grant all on *.* to dba@localhost;
mysql>revoke all on *.* from dba@localhost;

 

四、 删除账户及权限

mysql>drop user   用户名@‘localhost’

mysql>drop user   用户名@‘127.0.0.1’

 

MySQL grant、revoke 用户权限注意事项

1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

2. 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“

mysql>grant select on testdb.* to dba@localhost with grant option;

这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。

 

mysql授权表共有5个表:user、db、host、tables_priv和columns_priv。

授权表的内容有如下用途:
user表
user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。

db表
db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

host表
host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。

tables_priv表
tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。

columns_priv表
columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。

 

五、修改用户密码:

1、5.7.6之前修改密码

mysql>update mysql.user set password=password('新密码') where User="test" and Host="localhost";

mysql>flush privileges;

以上的方法,在MySQL 5.7早期版本时,还是很好用的,但在MySQL 5.7.6以后的版本,最后一点重置密码总是无法生效,会出来下面的错误。

2、5.7.6之后修改密码

  1. 在my.conf中[mysqld]下新增一行添加skip-grant-tables

    > vim /etc/my.cnf

    重启mysql

    > service mysqld restart

    登录root账号

    > mysql -uroot

  2.  

    如果当前root用户authentication_string字段下有内容,先将其置空,否则直接跳过本步骤

    mysql> use mysql;

    mysql> update user set authentication_string='' where user='root';

  3.  

    使用ALTER修改root密码(密码需包含大写字母,小写字母,数字,特殊符号),方法为:

    mysql> ALTER user 'root'@'localhost' IDENTIFIED BY 'Root1#';

  4.  

    重新编辑my.conf,去掉skip-grant-tables,重启mysql,用密码登录即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值