MySQL的权限系统围绕着两个概念:
认证->肯定用户是否容许链接数据库服务器 mysql
受权->肯定用户是否拥有足够的权限执行查询请求等。sql
若是认证不成功的话,哪么受权确定是没法进行的。数据库
revoke 跟 grant 的语法差很少,只须要把关键字 “to” 换成 “from” apache
表 GRANT和REVOKE管理的权限服务器
权限ide |
描述函数 |
ALL PRIVILEGESspa |
影响除WITH GRANT OPTION以外的全部权限debug |
ALTER对象 |
影响ALTER TABLE命令的使用 |
ALTER ROUTINE |
影响建立存储例程的能力 |
CREATE |
影响CREATE TABLE命令的使用 |
CREATE ROUTINE |
影响更改和弃用存储例程的能力 |
CREATE TEMPORARY TABLES |
影响CREATE TEMPORARY TABLE命令的使用 |
CREATE USER |
影响建立、弃用;重命名和撤销用户权限的能力 |
CREATE VIEW |
影响CREATE VIEW命令的使用 |
DELETE |
影响DELETE命令的使用 |
DROP |
影响DROP TABLE命令的使用 |
EXECUTE |
影响用户运行存储过程的能力 |
EVENT |
影响执行事件的能力(从MySQL5.1.6开始) |
FILE |
影响SELECT INTO OUTFILE和LOAD DATA INFILE的使用 |
GRANT OPTION |
影响用户委派权限的能力 |
INDEX |
影响CREATE INDEX和DROP INDEX命令的使用 |
INSERT |
影响INSERT命令的使用 |
LOCK TABLES |
影响LOCK TABLES命令的使用 |
PROCESS |
影响SHOW PROCESSLIST命令的使用 |
REFERENCES |
将来MySQL特性的占位符 |
RELOAD |
影响FLUSH命令集的使用 |
REPLICATION CLIENT |
影响用户查询从服务器和主服务器位置的能力 |
(续)
权限 |
描述 |
REPLICATION SLAVE |
复制从服务器所需的权限 |
SELECT |
影响SELECT命令的使用 |
SHOW DATABASES |
影响SHOW DATABASES命令的使用 |
SHOW VIEW |
影响SHOW CREATE VIEW命令的使用 |
SHUTDOWN |
影响SHUTDOWN命令的使用 |
SUPER |
影响管理员级命令的使用,如CHANGE、MASTER、KILL thread、mysqladmin debug、PURGE MASTER LOGS和SET GLOBAL |
TRIGGER |
影响执行触发器的能力(从MySQL5.1.6开始) |
UPDATE |
影响UPDATE命令的使用 |
USAGE |
只链接,不授予权限 |
1>.改表法。你的账号不容许从远程登录MySql服务器,只能在localhost。
解决办法:
在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
(1). mysql -u root -pvmwaremysql>use mysql;
(2). mysql>update user set host = '%' where user = 'root';
(3). mysql>select host, user from user;
2>. 受权法。例如,你想myuser使用mypassword从任何主机链接到mysql服务器的话。
(1). GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
(2). FLUSH PRIVILEGES;
若是你想容许用户myuser从ip为192.168.1.6的主机链接到mysql服务器,并使用mypassword做为密码
(1). GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
(2). FLUSH PRIVILEGES;
若是你想容许用户myuser从ip为192.168.1.6的主机链接到mysql服务器的dk数据库,并使用mypassword做为密码
(1). GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
(3). FLUSH PRIVILEGES;
注意:受权后必须FLUSH PRIVILEGES;不然没法当即生效。
另一种方法:
3>.在安装mysql的机器上运行:
一、d:mysqlbin>mysql -h localhost -u root //这样应该能够进入MySQL服务器
二、mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION //赋予任何主机访问数据的权限
三、mysql>FLUSH PRIVILEGES //修改生效
四、mysql>EXIT //退出MySQL服务器
这样就能够在其它任何的主机上以root身份登陆了。
4>.查看 MySQL 用户权限
查看当前用户(本身)权限:
show grants;
查看其余 MySQL 用户权限:
show grants for dba@localhost;
5>.撤销已经赋予给 MySQL 用户权限的权限
revoke 跟 grant 的语法差很少,只须要把关键字 “to” 换成 “from” 便可:
grant all on *.* to dba@localhost;
revoke all on *.* from dba@localhost;
6>.MySQL grant、revoke 用户权限注意事项
1. grant, revoke 用户权限后,该用户只有从新链接 MySQL 数据库,权限才能生效。
2. 若是想让受权的用户,也能够将这些权限 grant 给其余用户,须要选项 "grant option"
grant select on testdb.* to dba@localhost with grant option;
这个特性通常用不到。实际中,数据库权限最好由 DBA 来统一管理。
7>.用户和权限管理命令:
create user :用于建立新的用户帐户(从5.0版本开始有这个命令),在建立这个用户的时候不分配任何权限,
须要在建立以后经过grant命令来给改用户分配相应的权限。
eg:create user guest@localhost identified by '123456';
grant select on mydb.* to guest@localhost;
drop user:删除一个用户帐户(注意在4.1.1版本以前只能删除没有任何权限的帐户,5.0.2以后能够删除任何帐户)
eg:drop user guest;
rename user:能够实现重命名一个用户帐号。
grant:用于管理访问权限,也就是给用户帐号受权。固然它一样能够建立一个新的用户帐户。
eg:grant select, insert, update, delete on new_db.* to guest@'%' identified by '88888888';
grant 权限 on 数据库.表 to 用户 @ 访问方式 identified by 密码
grant select on mydb.* to guest@localhost identified by '123456';
BTW: 若是须要一个空密码或者无密码的帐户,必须先用Create User命令,而后经过
grant来分配权限。若是以下操做:
grant all privileges on mydb.* to visitor@'%' ;而在数据库user表中没有先建立visitor
用户,则会发生1133错误"Can't find any matching row in the user table"。grant只能创
有密码的帐户。
revoke:删除一个帐户,具体查看MySQL的文档。
8>.mysql中能够给你一个用户授予如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,用法格式为:
grant 权限 on 数据库对象 to 用户
grant 普通数据用户,查询、插入、更新、删除 数据库中全部表数据的权限。
grant select on testdb.* to common_user@’%’
grant insert on testdb.* to common_user@’%’
grant update on testdb.* to common_user@’%’
grant delete on testdb.* to common_user@’%’
或者,用一条 MySQL 命令来替代:
grant select, insert, update, delete on testdb.* to common_user@’%’
9>.grant 数据库开发人员,建立表、索引、视图、存储过程、函数。。。等权限。
grant 建立、修改、删除 MySQL 数据表结构权限。
grant create on testdb.* to developer@’192.168.0.%’;
grant alter on testdb.* to developer@’192.168.0.%’;
grant drop on testdb.* to developer@’192.168.0.%’;
grant 操做 MySQL 外键权限。
grant references on testdb.* to developer@’192.168.0.%’;
grant 操做 MySQL 临时表权限。
grant create temporary tables on testdb.* to developer@’192.168.0.%’;
grant 操做 MySQL 索引权限。
grant index on testdb.* to developer@’192.168.0.%’;
grant 操做 MySQL 视图、查看视图源代码 权限。
grant create view on testdb.* to developer@’192.168.0.%’;
grant show view on testdb.* to developer@’192.168.0.%’;
grant 操做 MySQL 存储过程、函数 权限。
grant create routine on testdb.* to developer@’192.168.0.%’; -- now, can show procedure status
grant alter routine on testdb.* to developer@’192.168.0.%’; -- now, you can drop a procedure
grant execute on testdb.* to developer@’192.168.0.%’;
10>.grant 普通 DBA 管理某个 MySQL 数据库的权限。
grant all privileges on testdb to dba@’localhost’
其中,关键字 “privileges” 能够省略。
11>.grant 高级 DBA 管理 MySQL 中全部数据库的权限。
grant all on *.* to dba@’localhost’
12>.MySQL grant 权限,分别能够做用在多个层次上。
1. grant 做用在整个 MySQL 服务器上:
grant select on *.* to dba@localhost; -- dba 能够查询 MySQL 中全部数据库中的表。
grant all on *.* to dba@localhost; -- dba 能够管理 MySQL 中的全部数据库
2. grant 做用在单个数据库上:
grant select on testdb.* to dba@localhost; -- dba 能够查询 testdb 中的表。
3. grant 做用在单个数据表上:
grant select, insert, update, delete on testdb.orders to dba@localhost;
4. grant 做用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
5. grant 做用在存储过程、函数上:
grant execute on procedure testdb.pr_add to ’dba’@’localhost’
grant execute on function testdb.fn_add to ’dba’@’localhost’
注意:修改完权限之后 必定要刷新服务,或者重启服务,刷新服务用:FLUSH PRIVILEGES
MySQL 赋予用户权限命令的简单格式可归纳为:
grant 权限 on 数据库对象 to 用户
1、grant 普通数据用户,查询、插入、更新、删除 数据库中全部表数据的权限
grant select on testdb.* to common_user@'%'
grant insert on testdb.* to common_user@'%'
grant update on testdb.* to common_user@'%'
grant delete on testdb.* to common_user@'%'
或者,用一条 MySQL 命令来替代:
grant select, insert, update, delete on testdb.* to common_user@'%'
2、grant 数据库开发人员,建立表、索引、视图、存储过程、函数等权限
grant 建立、修改、删除 MySQL 数据表结构权限:
grant create on testdb.* to developer@'192.168.0.%';
grant alter on testdb.* to developer@'192.168.0.%';
grant drop on testdb.* to developer@'192.168.0.%';
grant 操做 MySQL 外键权限:
grant references on testdb.* to developer@'192.168.0.%';
grant 操做 MySQL 临时表权限:
grant create temporary tables on testdb.* to developer@'192.168.0.%';
grant 操做 MySQL 索引权限:
grant index on testdb.* to developer@'192.168.0.%';
grant 操做 MySQL 视图、查看视图源代码权限:
grant create view on testdb.* to developer@'192.168.0.%';
grant show view on testdb.* to developer@'192.168.0.%';
grant 操做 MySQL 存储过程、函数权限:
grant create routine on testdb.* to developer@'192.168.0.%'; -- now, can show procedure status
grant alter routine on testdb.* to developer@'192.168.0.%'; -- now, you can drop a procedure
grant executeon testdb.* to developer@'192.168.0.%';
3、grant 普通 DBA 管理某个 MySQL 数据库的权限
grant all privileges on testdb to dba@'localhost';
其中,关键字 “privileges” 能够省略。
4、grant 高级 DBA 管理 MySQL 中全部数据库的权限
grant all on *.* to dba@'localhost'
5、MySQL grant 权限,分别能够做用在多个层次上
1. grant 做用在整个 MySQL 服务器上:
grant select on *.* to dba@localhost; -- dba 能够查询 MySQL 中全部数据库中的表
grant all on *.* to dba@localhost; -- dba 能够管理 MySQL 中的全部数据库
2. grant 做用在单个数据库上:
grant select on testdb.* to dba@localhost; -- dba 能够查询 testdb 中的表。
3. 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';
4. grant 做用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
5. grant 做用在存储过程、函数上:
grant execute on procedure testdb.pr_add to 'dba'@'localhost'
grant execute on function testdb.fn_add to 'dba'@'localhost'
6、查看 MySQL 用户权限
查看当前用户(本身)权限:
show grants;
查看其余 MySQL 用户权限:
show grants for dba@localhost;
7、撤销已经赋予给 MySQL 用户权限的权限
revoke 跟 grant 的语法差很少,只须要把关键字 “to” 换成 “from” 便可:
grant all on *.* to dba@localhost;
revoke all on *.* from dba@localhost;
8、MySQL grant、revoke 用户权限注意事项
1. grant, revoke 用户权限后,该用户只有从新链接 MySQL 数据库,权限才能生效。
2. 若是想让受权的用户,也能够将这些权限 grant 给其余用户,须要选项"grant option"
grant select on testdb.* to dba@localhost with grant option;
这个特性通常用不到。实际中,数据库权限最好由 DBA 来统一管理。
9、补充
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表指定列级权限。这里指定的权限适用于一个表的特定列。