一、背景
接触数据库离不开的就是创建账户及授权,好的密码及权限控制能帮助DBA避免许多不必要的麻烦
二、用户创建及密码相关
1.创建用户示例
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'bbb'@'192.168.%' IDENTIFIED BY 'password';
2.授权用户示例
GRANT ALL ON *.* TO 'user'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
3.密码相关
3.1 修改密码的几种方式
ALTER USER 'user'@'localhost' IDENTIFIED BY 'password';
set password for user@localhost = password('password');
update mysql.user set authentication_string=password('password') where user='user' and host ='localhost';flush privileges;
mysqladmin -u用户名 -p旧密码 password 新密码
3.2 密码过期相关
- 指定过期时间
# 配置文件
[mysqld]
default_password_lifetime=180
# 在线全局指定
SET GLOBAL default_password_lifetime = 180;
- 给指定用户确定的密码过期时间
CREATE USER 'user'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'user'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
- 禁止密码过期
CREATE USER 'user'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'user'@'localhost' PASSWORD EXPIRE NEVER;
- 跟随默认的全局到期策略
CREATE USER 'user'@'localhost' PASSWORD EXPIRE DEFAULT;
ALTER USER 'user'@'localhost' PASSWORD EXPIRE DEFAULT;
- 手动使账户密码过期
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
4.账户资源相关
mysql> CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank'
-> WITH MAX_QUERIES_PER_HOUR 20 # 每小时查询次数
-> MAX_UPDATES_PER_HOUR 10 # 每小时更改次数
-> MAX_CONNECTIONS_PER_HOUR 5 # 每小时链接次数
-> MAX_USER_CONNECTIONS 2; # 可以同时连接数据库的数量,为0则不限制
5.更改用户名称
# 这里的名称包括名字和host,更安全修改host的方式
rename user test@'%' to test@'192.168.%';
rename user test@'%' to test_abc@'192.168.%';
三、权限
权限名称 | 作用域 | 意义 |
---|---|---|
ALL [PRIVILEGES] | 服务器 | 除GRANT OPTION外的所有权限 |
ALTER | 表 | 允许使用该ALTER TABLE语句来更改表的结构。 ALTER TABLE还需要 CREATE和 INSERT权限。如重命名表 |
ALTER ROUTINE | 存储过程和函数 | 允许更改或删除存储过程和函数的语句。 |
CREATE | 数据库、表或索引 | 允许创建新数据库和表的语句 |
CREATE ROUTINE | 存储过程和函数 | 允许创建存储过程和函数 |
CREATE TABLESPACE | 服务器 | 允许创建、更改或删除表空间和日志文件组 |
CREATE TEMPORARY TABLES | 表 | 允许创建临时表以及对该临时表的任何操作 |
CREATE USER | 服务器 | 允许使用ALTER USER,CREATE USER, DROP USER, RENAME USER,和 REVOKE ALL PRIVILEGES语句。 |
CREATE VIEW | 视图 | 允许CREATE VIEW |
DELETE | 表 | 允许删除表中行数据 |
DROP | 数据库、表、视图 | 允许删除数据库、表、视图,删除分区和truncate table也需要drop权限 |
EVENT | 数据库 | 允许为事件调度程序来创建、更改、删除或显示事件 |
EXECUTE | 存储过程和函数 | 允许执行存储过程和函数的语句 |
FILE | 服务器 | LOAD DATA 和 SELECT … INTO OUTFILE语句和 LOAD_FILE()函数在服务器主机上启用读取和写入文件。允许在 MySQL 服务器具有写访问权限的任何目录中创建新文件。可通过secure_file_priv系统变量设置为特定目录.从 MySQL 5.7.17 开始,创建表时指定DATA DIRECTORY 或者 INDEX DIRECTORY也需要file权限 |
GRANT OPTION | 数据库,表,存储过程或函数 | 向其他用户授权或者回收权限,注意,这些权限只能是自己所拥有的权限 |
INDEX | 表 | 允许创建或删除索引的语句 |
INSERT | 表或列 | 允许将行插入到数据库的表中。 ANALYZE TABLE, OPTIMIZE TABLE和 REPAIR TABLE 也需要insert权限 |
LOCK TABLES | 数据库 | 通过 LOCK TABLES 显示锁定任何你有select权限的表,这样包括写锁,能避免其他用户读取锁定的表 |
PROCESS | 服务器 | 有了PROCESS 特权,用户可以访问有关所有线程的信息,甚至是属于其他用户的线程。没有PROCESS 权限,非匿名用户可以访问自己线程的信息,但不能访问其他用户的线程,匿名用户无法访问线程信息,可以使用SHOW PROCESSLIST 语句、mysqladmin processlist 命令和 INFORMATION_SCHEMA.PROCESSLIST 表访问可用的线程信息,还允许使用SHOW ENGINE语句、访问 INFORMATION_SCHEMA InnoDB_开头的表,FILES表 |
PROXY | 服务器 | 使一个用户能够冒充或成为另一个用户 |
REFERENCES | 数据库或表 | 创建外键约束需要REFERENCES父表的权限 |
RELOAD | 服务器 | FLUSH 语句的使用。使用等同于 FLUSH 操作的 mysqladmin 命令:flush-hosts、flush-logs、flush-privileges、flush-status、flush-tables、flush-threads、refresh 和 reload。reload 命令告诉服务器将授权表重新加载到内存中。 刷新权限是重新加载的同义词。 refresh 命令关闭并重新打开日志文件并刷新所有表。 其他flush-xxx 命令执行类似于refresh 的功能,但更具体,在某些情况下可能更可取。 例如,如果您只想刷新日志文件,flush-logs 是比刷新更好的选择。使用执行各种 FLUSH 操作的 mysqldump 选项:–flush-logs 和 --master-data。RESET 语句的使用。 |
REPLICATION CLIENT | 服务器 | 允许使用SHOW MASTER STATUS,SHOW SLAVE STATUS和SHOW BINARY LOGS语句。 |
REPLICATION SLAVE | 服务器 | 使帐户能够使用 SHOW SLAVE HOSTS、SHOW RELAYLOG EVENTS 和 SHOW BINLOG EVENTS 语句请求对源服务器上的数据库进行的更新。 使用 mysqlbinlog 选项 --read-from-remote-server (-R) 和 --read-from-remote-master 也需要此权限。 将此权限授予副本服务器用于连接到当前服务器作为其源的帐户。 |
SELECT | 表或列 | 查看表的权限 |
SHOW DATABASES | 服务器 | SHOW DATABASE语句的权限 。没有这个权限的帐户只能看到他们有一些权限的数据库,如果服务器是用该–skip-show-database选项启动的,则根本不能使用该语句 。任何拥有任意一个或几个全局权限的用户可以视为拥有该权限 |
SHOW VIEW | 视图 | 查看视图 |
SHUTDOWN | 服务器 | 启用 SHUTDOWN 语句、mysqladmin 关闭命令和 mysql_shutdown() C API 函数的使用。 |
SUPER | 服务器 | 影响以下操作和服务器行为:通过修改全局系统变量来启用服务器配置更改。对于某些系统变量,设置 session 值也需要 SUPER 权限。启用对全局事务特性的更改。使帐户能够启动和停止复制,包括组复制。允许使用 CHANGE MASTER TO 和 CHANGE REPLICATION FILTER 语句。通过 PURGE BINARY LOGS 和 BINLOG 语句启用二进制日志控制。允许在执行视图或存储程序时设置有效的授权 ID。具有此权限的用户可以在视图或存储程序的 DEFINER 属性中指定任何帐户。允许使用 CREATE SERVER、ALTER SERVER 和 DROP SERVER 语句。启用 mysqladmin 调试命令的使用。启用 InnoDB 加密密钥轮换。允许通过 DES_ENCRYPT() 函数读取 DES 密钥文件。启用版本令牌功能的执行。启用对非超级帐户不允许的客户端连接的控制:启用使用 KILL 语句或 mysqladmin kill 命令来终止属于其他帐户的线程。 (一个帐户总是可以杀死自己的线程。)SUPER 客户端连接时,服务器不执行 init_connect 系统变量内容。即使达到了 max_connections 系统变量配置的连接限制,服务器也会接受来自 SUPER 客户端的一个连接。处于离线模式(启用了离线模式)的服务器不会在下一个客户端请求时终止 SUPER 客户端连接,并接受来自 SUPER 客户端的新连接。即使启用了 read_only 系统变量,也可以执行更新。这适用于显式表更新,以及隐式更新表的帐户管理语句(如 GRANT 和 REVOKE)的使用。如果启用了二进制日志记录,您可能还需要 SUPER 权限来创建或更改存储的函数 |
TRIGGER | 表 | 启用触发器操作。您必须具有此权限才能为表创建、删除、执行或显示该表的触发器。 |
UPDATE | 表或列 | 更改行数据 |
USAGE | 服务器 | 无特别权限 |
官网地址: https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_reload
rename user