Mysql 用户权限

来源:互联网 发布:java和php哪个更累 编辑:程序博客网 时间:2024/05/16 11:07

Mysql用户权限

==========================================
参考:http://blog.chinaunix.net/uid-20639775-id-3249105.html

一、MYSQL权限简介
mysql分两阶段的验证:
1.第一阶段:服务器首先会检查你是否允许连接。
因为创建用户的时候会加上主机限制,因为创建用户的时候会加上主机限制,
可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登录。
2.第二阶段:如果你能连接,MYSQL会检查你发出的每个请求,看你是否有足够的权限实施它。
比如你要更新某个表、或者查询某个表,MYSQL会检查你对哪个表或者某个列是否有权限。
再比如,你要运行某个存储过程,MYSQL会检查你对存储过程是否有执行权限等。

MYSQL到底都有哪些权限呢?从官网复制一个表来看看:

权限
权限级别
权限级别
CREATE数据库、表或索引创建数据库、表或索引权限DROP数据库或表删除数据库或表权限GRANT OPTION数据库、表或保存的程序赋予权限选项REFERENCES数据库或表 ALTER表更改表,比如添加字段、索引等DELETE表删除数据权限INDEX表索引权限INSERT表插入权限SELECT表查询权限UPDATE表更新权限CREATE VIEW视图创建视图权限SHOW VIEW视图查看视图权限ALTER ROUTINE存储过程更改存储过程权限CREATE ROUTIN存储过程创建存储过程权限EXECUTE存储过程执行存储过程权限FILE服务器主机上的文件访问文件访问权限CREATE TEMPORARY TABLES服务器管理创建临时表权限LOCK TABLES服务器管理锁表权限CREATE USER服务器管理创建用户权限PROCESS服务器管理查看进程权限RELOAD服务器管理执行flush-hosts, flush-logs, flush-privileges, flush-status,   flush-tables,flush-threads, refresh, reload等命令的权限REPLICATION CLIENT服务器管理复制权限REPLICATION SLAVE服务器管理复制权限SHOW DATABASES服务器管理查看数据库权限SHUTDOWN服务器管理关闭数据库权限SUPER服务器管理执行kill线程权限

MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等,这个可以从官方文档中的一个表来说明:


权限分布        可能的设置的权限
表权限        'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'
列权限        'Select', 'Insert', 'Update', 'References'
过程权限    'Execute', 'Alter Routine', 'Grant'    

针对权限这部分,最主要的是要知道
MYSQL是如何验证的(两阶段验证),
以及mysql各个权限是做什么用的,
以及那些权限用在什么地方(表or列?)

二、MYSQL GRANT命令

GRANT命令说明:
ALL PRIVILEGES 是表示所有权限,也可以使用select、update等权限提到的权限。
ON 用来指定权限针对哪些库和表。
*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。
TO 表示将权限赋予某个用户。
dbusername@'localhost' 表示dbusername用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。
    注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,
    这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。
IDENTIFIED BY 指定用户的登录密码。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。
    注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其他用户授权。

备注:可以使用GRANT重复给用户添加权限,权限叠加,
比如你先给用户添加了一个select权限,然后又给用户添加了一个insert权限,那么该用户就同时拥有了select和insert权限。

GRANT ALL PRIVILEGES ON *.* TO taiyang@'localhost' IDENTIFIED BY 'sun' WITH GRANT OPTION;

1.刷新权限: FLUSH PRIVILEGES;
2.查看权限: SHOW GRANTS FOR 'dbusername'@'192.168.100.%';

3.回收权限: REVOKE DELETE ON test.* FROM 'dbusername'@'192.168.100.%';

权限问题可能会报错:

org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user ......)


三、MYSQL User

mysql.user表保存的是用户的登录信息
SELECT * from mysql.user;

创建用户: create user dbusername IDENTIFIED by 'password';
删除用户: drop user dbusername;
//mysql5之前删除用户时必须先使用revoke 删除用户权限,然后删除用户,mysql5之后drop 命令可以删除用户的同时删除用户的相关权限
更改密码:
set password for dbusername = password('newpassword');
update mysql.user set password=password('newpassword') where user='dbusername';
修改用户:
rename user dbusername to newdbusername; //mysql 5之后可以使用,之前需要使用update 更新user表

0 0
原创粉丝点击