首页 > 代码库 > Mysql用户及权限管理

Mysql用户及权限管理

一、用户权限

GRANT命令用来建立新用户,指定用户口令并增加用户权限

mysql> GRANT <privileges> ON <what> TO <user> [IDENTIFIED BY "<password>"] [WITH GRANT OPTION];

参数说明:

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

  数据库/数据表/数据列权限: 

Alter: 修改已存在的数据表(例如增加/删除列)和索引。

Create: 建立新的数据库或数据表。

Delete: 删除表的记录。

Drop: 删除数据表或数据库。

INDEX: 建立或删除索引。

Insert: 增加表的记录。

Select: 显示/搜索表的记录。

Update: 修改表中已存在的记录。


2.全局管理MySQL用户权限:

file: 在MySQL服务器上读写文件。

PROCESS: 显示或杀死属于其它用户的服务线程。

RELOAD: 重载访问控制表,刷新日志等。

SHUTDOWN: 关闭MySQL服务。


3.特别的权限:

ALL: 允许做任何事(和root一样)。

USAGE: 只允许登录--其它什么也不允许做。


4.user表中host列的值的意义

%            匹配所有主机

localhost    localhost不会被解析成IP地址,直接通过UNIXsocket连接

127.0.0.1    会通过TCP/IP协议连接,并且只能在本机访问;

::1          ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1


例如:mysql> grant all privileges on *.* to ‘test‘@‘%‘ identified by ‘123456‘ with grant option;

all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。

on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user

to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”test”@”192.168.0.%”,表示test这个用户只能在192.168.0IP段登录

identified by:指定用户的登录密码

with grant option:表示允许用户将自己的权限授权给其它用户


权限会自动叠加,不会覆盖之前授予的权限.


示例:

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‘


二、刷新权限

对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。

mysql> flush privileges;


三、查看用户权限

查看所有用户

SELECT DISTINCT CONCAT(‘User: ‘‘‘,user,‘‘‘@‘‘‘,host,‘‘‘;‘) AS query FROM mysql.user;

查看用户权限

show grants for ‘test‘@‘192.168.1.%‘;


四、回收权限

删除test这个用户的create权限,该用户将不能创建数据库和表。

mysql> revoke create on *.* from ‘test@localhost‘;

mysql> flush privileges;

删除用户

mysql> drop user ‘test‘@‘localhost‘;


五、用户重命名

shell> rename user ‘test3‘@‘%‘ to ‘test1‘@‘%‘;


六、修改密码

更新mysql.user表

mysql> use mysql;

# mysql5.7之前

mysql> update user set password=password(‘123456‘) where user=‘root‘;

# mysql5.7之后

mysql> update user set authentication_string=password(‘123456‘) where user=‘root‘;

mysql> flush privileges;


用set password命令

mysql> set password for ‘root‘@‘localhost‘=password(‘123456‘);


mysqladmin

mysql> mysqladmin -uroot -p123456 password 1234abcd


七、权限说明

MySQL存取控制包含2个阶段:

阶段1:服务器检查你是否允许连接。

阶段2:假定你能连接,服务器检查你发出的每个请求。

Permissible Privileges for GRANT and REVOKE

PrivilegeColumnContext
CREATECreate_privdatabases, tables, or indexes
DROPDrop_privdatabases, tables, or views
GRANT OPTIONGrant_privdatabases, tables, or stored routines
LOCK TABLESLock_tables_privdatabases
REFERENCESReferences_privdatabases or tables
EVENTEvent_privdatabases
ALTERAlter_privtables
DELETEDelete_privtables
INDEXIndex_privtables
INSERTInsert_privtables or columns
SELECTSelect_privtables or columns
UPDATEUpdate_privtables or columns
CREATE TEMPORARY TABLESCreate_tmp_table_privtables
TRIGGERTrigger_privtables
CREATE VIEWCreate_view_privviews
SHOW VIEWShow_view_privviews
ALTER ROUTINEAlter_routine_privstored routines
CREATE ROUTINECreate_routine_privstored routines
EXECUTEExecute_privstored routines
FILEFile_privfile access on server host
CREATE TABLESPACECreate_tablespace_privserver administration
CREATE USERCreate_user_privserver administration
PROCESSProcess_privserver administration
PROXYsee proxies_priv tableserver administration
RELOADReload_privserver administration
REPLICATION CLIENTRepl_client_privserver administration
REPLICATION SLAVERepl_slave_privserver administration
SHOW DATABASESShow_db_privserver administration
SHUTDOWNShutdown_privserver administration
SUPERSuper_privserver administration
ALL [PRIVILEGES]
server administration
USAGE
server administration


权限列表

权限权限级别权限说明
CREATE数据库、表或索引创建数据库、表或索引权限
DROP数据库或表删除数据库或表权限
GRANT OPTION数据库、表或保存的程序赋予权限选项
REFERENCES数据库或表
ALTER更改表,比如添加字段、索引等
DELETE删除数据权限
INDEX索引权限
INSERT插入权限
SELECT查询权限
UPDATE更新权限
CREATE VIEW视图创建视图权限
SHOW VIEW视图查看视图权限
ALTER ROUTINE存储过程更改存储过程权限
CREATE ROUTINE存储过程创建存储过程权限
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线程权限


权限分布

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


八、MySQL权限原则

权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:

1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。

2、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。

3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。

4、为每个用户设置满足密码复杂度的密码。

5、定期清理不需要的用户。回收权限或者删除用户。


本文出自 “大云技术” 博客,请务必保留此出处http://hdlptz.blog.51cto.com/12553181/1897584

Mysql用户及权限管理