Mysql权限之授权,查看和回收以及删除用户

来自linux中国网wiki
跳到导航 跳到搜索

mysql权限之授权,查看和回收以及删除用户

mysql权限之授权

命令格式
grant 权限 on 数据库名.表名 to 用户名@登陆方式 identified by 'password1';

grant select,insert,update,delete on dbname.tablename to [email protected] identified by 'password';
# 4 root 
grant all on *.*  to [email protected]'127.0.0.1' identified by 'myFD23';

grant  select,insert,

update,delete  on  wiki.* to [email protected]'10.104.55.111' identified by  '12345678';

#程序用的用户  

GRANT select,update,insert,delete  ON dbname1.* TO [email protected]"%"  IDENTIFIED BY "xxxxx";
GRANT select,update,insert,delete  ON dbname2.* TO [email protected]"%"  IDENTIFIED BY "xxxxx";
#创建只读用户
GRANT SElECT ON *.* TO 'username'@'%' IDENTIFIED BY "password";
flush privileges;

小结:使用引号或双引号没有任何区别,主要是用于区别字符和命令 

#aliyun 的 语句
/*常规*/
CREATE USER 'ops'@'%' IDENTIFIED BY 'ops35GJops8*';

/*高级选项*/

/*服务器权限设置*/
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, FILE, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, GRANT OPTION, TRIGGER ON *.* TO 'ops'@'%';

/*数据库权限设置*/



mysql权限之密码修改

#mysql5.7 

update mysql.user set authentication_string=PASSWORD('123456#') where user='root';
flush privileges;
特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了

mysql授权查看

查看mysql中存在的用户 这个在回头查看授权时非常好用
mysql> select user,host from mysql.user;

([email protected]:)[mysql]> select user,host from mysql.user;
+------------+--------------------------+
| user       | host                     |
+------------+--------------------------+
| oldgirl    | %                        |
| wan        | %                        |
| wanlong    | %                        |
| rep        | 10.10.10.%               |
| root       | 10.10.10.%               |
| wan        | 10.10.10.%               |

查看MySQL用户权限:
show grants for 你的用户@ip; #根据上面 就可以 收集回原来的授权详情

show grants for 你的用户; # or


其它
#查看len数据库已经授权的用户
select user from mysql.db where db="dbname"

mysql> select * from mysql.user where user='root' \G    

#查看用户和IP ,下面的例子是查看 下面的库有没有 对 19.145.130.218 的dataviewre授权,对烦人的数据中心的报警很有用
show grants for [email protected]'19.145.130.218';
这样就能看此机 哪些库对 [email protected]’19.145.130.218‘ 有授权



查看MYSQL数据库中所有用户
mysql>SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;




常用权限

 1.select、insert、update和delete权限 允许你在一个数据库现有的表上实施操作,是基本权限 
2.alter权限允许你使用ALTER TABLE 
3.create和drop权限允许你创建新的数据库和表,或抛弃(删除)现存的数据库和表 如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了MySQL存取权限的数据库! 
4.grant权限允许你把你自己拥有的那些权限授给其他的用户。 
你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。 可以同时列出许多被授予的单个权限。 
例如,如果想让用户能读取和修改已有表的内容,但又不允许创建新表或删除表,可按如下授权: 
GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db.* TO 'user'@'%' IDENTIFIEDBY "pass"

#2017
<privileges>是一个用逗号分隔的你想要赋予的MySQL用户权限的列表。你可以指定的权限可以分为三种类型:

数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引。
Create: 建立新的数据库或数据表。
Delete: 删除表的记录。
Drop: 删除数据表或数据库。
INDEX: 建立或删除索引。
Insert: 增加表的记录。
Select: 显示/搜索表的记录。
Update: 修改表中已存在的记录。

全局管理MySQL用户权限:

file: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。

特别的权限:

ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。

密码修改

update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';
flush privileges;
SET PASSWORD FOR 'root'@'%' = PASSWORD('ops35GJIL67'); #rds

mysql权限回收

#NOTE 这个回收后 用户还在的 只是看不到除了 的其它库了 information_schema

revoke INSERT,UPDATE,DELETE   on dbname.tablename from [email protected];
revoke all on user.* from [email protected]'localhost'; 

#最开始的权限 
([email protected]:)[mysql]> show grants for [email protected];
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                                            |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'sdk'@'10.104.103.162' IDENTIFIED BY PASSWORD '*dfds' |

删除用户

REVOKE语句只能取消用户的权限,而不可以删除用户。即使取消了所有的权限,用户仍然可以连接到服务器。要想彻底的删除用户,必须使用DELETE语句将该用户的记录从MySQL数据库中的user表中删除。
该语句的语法格式如下:
Delete from user where user = "user_name" and host = "host_name" ;
使用DELETE删除用户sss,代码如下:
delete from user where user='sss' and host='localhost' ;
flush privileges ; 

常见问题

问题1

 
授权后依然访问不了 

mysql> grant all on *.* to  [email protected]'192.168.30.54' ;
Query OK, 0 rows affected (0.00 sec)

问题是 my.cnf bind-address问题
bind-address 127.0.0.1 
改为
bind-address 0.0.0.0


参考

mysql授权查看 http://blog.linuxchina.net/?p=950

mysql 权限回收 https://dev.mysql.com/doc/refman/5.7/en/revoke.html

SQL之Grant(分配权限)和Revoke(回收权限) http://liaoen.blog.51cto.com/2253541/819081

MySQL取消权限和删除用户 http://blog.linuxchina.net/?p=3437

mysql 数据库授权(给某个用户授权某个数据库) http://www.cnblogs.com/jifeng/archive/2011/03/06/1972183.html

美国国家航空航天局宣布在TRAPPIST-1附近发现7颗行星,并有数颗位于适居带。