一、权限介绍
1.权限类别:对象界别划分
库级别、表级别、字段级别、管理类权限、程序类权限
(1)库和表级别的权限:对于具体的库或者表进行授权操作
ALTER、CREATE 、CREATE VIEW、DROP、INDEX、SHOW VIEW
GRANT OPTION:能够把自己获得的权限赠经其他用户一个副本;回收权限困难
(2)数据操作:增删查改
SELECT、INSERT、DELETE、UPDATE
(3)字段级别:授权可以对指定字段才有去权限
SELECT(col1,col2,...)、UPDATE(col1,col2,...)、INSERT(col1,col2,...)
(4) 管理类:
CREATE TEMPORARY TABLES创建临时表
CREATE USER创建用户
FILE从文件中导入导出
SUPER执行管理操作的权限
SHOW DATABASES查看其所有权限中所能查看的数据库
RELOAD重新装载授权表
SHUTDOWN进程级别关闭数据库权限
REPLICATION SLAVE复制相关
REPLICATION CLIENT复制相关
LOCK TABLES服务器级别对表锁操作
PROCESS根进程相关的
(5)程序类::是否有权限去运行存储过程或存储函数
FUNCTION函数、PROCEDURE存储过程、TRIGGER触发器
配合CREATE, ALTER, DROP, EXCUTE
(6)所有有限
ALL PRIVILEGES,,可简写为ALL
2.用户权限保存
设定的相关用户权限信息将保存在元数据数据库(自带的数据字典表):mysql库中的授权表
db数据库相关权限
host通过什么主机连接直当前mysql
user可登录用户
columns_priv字段相关权限
tables_priv表相关权限
procs_priv程序相关权限
proxies_priv代理相关权限
二、用户账户创建和授权
1.授权相关
(1)授权:GRANT
GRANT priv_type[,...] ON [{table|function|procedure}] db.{table|routine} TO 'USERNAME'@'HOST' [IDENTIFIED BY 'password']
[REQUIRE SSL] [WITH with_option]
权限 在 对象 db.存储历程 存储函数 TO 'USERNAME'@'HOST' [IDENTIFIED BY 'password'] ssl 指明限制
with_option:
GRANT OPTION
| MAX_QUERIES_PER_HOUR # 每小时资源查询次数
| MAX_UPDATES_PER_HOUR # 每小时资源更新次数
| MAX_CONNECTIONS_PER_HOUR # 每小时创建的连接数
| MAX_USER_CONNECTIONS # 同一个用户账号同时连接次数
(2)取消授权:REVOKE
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level FROM user [, user] ...
(3) 查看用户获得的授权:SHOW GRANTS FOR
SHOW GRANTS FOR 'USERNAME'@'HOST'
一般新创建的用户只有usage权限,即用户有权限通过远程连接创建连接线程连入mysql
2.用户相关
(1)创建用户:CREATE USER
CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'password'];可设置密码,也可以省略
(2)用户重命名:RENAME USER
RENAME USER old_user_name TO new_user_name
(3)删除用户
DROP USER 'USERNAME'@'HOST'
注意:mysql的反解功能会解析IP到主机名,因为给ip授权而没有给主机名没有给授权时,会报错。
(4)修改密码
1) SET PASSWORD FOR
2) UPDATE mysql.user SET password=PASSWORD('your_password') WHERE clause;
更新表PASSWORD函数加密密码,
clause格式; user='root' [and host='']
注意:只有刷新授权表,才能立即生效(FIUSH PRIVILEGES)
3) mysqladmin password [new-password]
mysqladmin的子命令:mysqladmin [OPTIONS] command command....
3.忘记管理员密码的解决办法:(离线)
(1) 启动mysqld进程时,为其使用:--skip-grant-tables --skip-networking 装载时:跳过授权表,禁止远程登录
(2) 使用UPDATE命令修改管理员密码
(3) 关闭mysqld进程,移除上述两个选项,重启mysqld;