MYSQL权限管理
在MySQL数据库中,使用grant命令授权、 revoke命令撤销授权。
授权:grant to
grant all privileges on databaseName.tableName to ‘用户名’ [@‘主机名’] ;
撤销授权 revoke from
revoke all privileges on databaseName.tableName from ‘用户名’ [@‘主机名’] ;
刷新权限
FLUSH PRIVILEGES;
查看权限
show grants for ‘用户名’ [@‘主机名’] ;
使用grant和revoke进行授权、撤销授权时,需要指定具体是哪些权限,这些权限大体可以分为3类,
数据类、结构类和管理类。
数据 | 结构 | 管理 |
---|---|---|
SELECT INSERT UPDATE DELETE FILE | CREATE ALTER INDEX DROP CREATE TEMPORARY TABLES SHOW VIEW CREATE ROUTINE ALTER ROUTINE EXECUTE CREATE VIEW EVENT TRIGGER | USAGE GRANT SUPER PROCESS RELOAD SHUTDOWN SHOW DATABASES LOCK TABLES REFERENCES REPUCATION CUENT REPUCATION SLAVE CREATE USER |
实例:
查看用户的权限:
新增用户
show grants for “xiaoluo”:
给用户xiaoluo 赋予数据库mydb中的所有表的查询权限;
grant select on mydb to “xiaoluo”;
移除用户的查询权限
revoke select on mydb.* from “xiaoluo”@"%";
给xiaoluo 赋予表area的查询和修改权限:
grant select, update on mydb.area to “xiaoluo”@"%";
只有查询和修改权限,进行删除操作时,系统报错:提示无权限
修改用户密码:
alter user “user_name”@"%" identified by “new_password”;
指定用户登录IP :限定用户登录的IP 。如果IP不对,即使用户名和密码正确也不能登录!
update user set host=“192.168.0.104” where User=“xiaoluo”;
禁止root 用户远程登录:
在实际工作中,一般情况下都会禁止root用户远程登录,请问这是为什么?
- root是MySQL数据库的超级管理员,几乎拥有所有权限,一旦泄露后果非常严重;
- root是MySQL数据库的默认用户,所有人都知道,如果不禁止远程登录,可以针对root用户暴力破解密码。
mysql 用户名实际上是由两部分组成的:用户名@用户地址
对于root用户。我们需要设置地址为:localhost .这样就可以保证别人无法远程登录root 用户。只能在本地登录
mysql 中用户的信息都在同一个表中,mysql.user 表。
这个表中存在所有系统中的用户信息,包含用户名称、用户连接得知、用户权限、用户密码管理(过期设置等)
小结:对于数据库权限。通常root用户设置为不可远程登录:localhost 登录。对于权限要求高的地方。可以指定每个用户登录的IP 。以及每个用户的具体权限:哪个数据库,哪个表,那一列等。也可以指定新的用户具备管理员的部分权限进行管理工作。