Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
与 MySQL 安全特性差异
除以下功能外,支持与 MySQL 5.6 类似的安全特性。
max_questions
,max_updated
以及max_user_connections
。可用的身份验证插件
支持多种身份验证方式。通过使用
CREATE USER
语句和ALTER USER
语句,即可创建新用户或更改权限系统内的已有用户。身份验证方式与 MySQL 兼容,其名称与 MySQL 保持一致。目前仅支持MySQL 5.6 默认的
mysql_native_password
身份验证方式。用户管理
兼容MySQL语法的用户管理。
1. namespace 管理
1.1 create namespace
语法:
1.2 show namespace
1.3 alter namespace
1.4 drop namespace
2. user 管理
2.1 create user
2.2 show user
2.3 alter user
2.4 drop user
权限管理
支持 MySQL 5.6 的权限管理系统,包括 MySQL 的语法和权限类型。
本文档主要介绍权限相关操作、各项操作需要的权限以及权限系统的实现。
权限相关操作
授予权限
授予
test
用户对数据库TestDB
的读权限:为
test
用户授予所有数据库,全部权限:如果指定的用户不存在,
GRANT
语句将报错。GRANT
还必须精确匹配地授予用户数据库的权限:收回权限
REVOKE
语句与GRANT
对应:如果想将一些特殊的关键字做为表名,可以用反引号包含起来。比如:
查看为用户分配的权限
SHOW GRANTS
语句可以查看为用户分配了哪些权限。例如:查看当前用户的权限:
或者:
SHOW GRANTS FOR CURRENT_USER();
查看某个特定用户的权限:
例如,创建一个用户
rw_user
并为其授予TestDB.write_table
表的写权限,和全局读权限。查看用户 `rw_user 的权限。
SHOW GRANTS FOR `rw_user`;
各操作需要的权限
已支持的权限控制
未支持的权限控制(仅兼容MySQL语法)
ALTER
ALTER
语句,均需要用户对所操作的表拥有ALTER
权限。ALTER...DROP
和ALTER...RENAME TO
外,均需要对所操作表拥有INSERT
和CREATE
权限。ALTER...DROP
语句,需要对表拥有DROP
权限。ALTER...RENAME TO
语句,需要对重命名前的表拥有DROP
权限,对重命名后的表拥有CREATE
和INSERT
权限。CREATE DATABASE
需要拥有全局
CREATE
权限。CREATE INDEX
需要对所操作的表拥有
INDEX
权限。CREATE TABLE
需要对要创建的表所在的数据库拥有
CREATE
权限;若使用CREATE TABLE...LIKE...
需要对相关的表拥有SELECT
权限。DROP DATABASE
需要对数据库拥有
DROP
权限。DROP INDEX
需要对所操作的表拥有
INDEX
权限。DROP TABLES
需要对所操作的表拥有
DROP
权限。LOAD DATA
LOAD DATA
对所操作的表拥有FILE
权限。TRUNCATE TABLE
需要对所操作的表拥有
DELETE
权限。RENAME TABLE
需要拥有
ALTER
权限。SHOW 【TODO】
SHOW CREATE TABLE
需要任意一种权限。SHOW CREATE VIEW
需要SHOW VIEW
权限。SHOW GRANTS
需要拥有对mysql
数据库的SELECT
权限。如果是使用SHOW GRANTS
查看当前用户权限,则不需要任何权限。SHOW PROCESSLIST
需要SUPER
权限来显示属于其他用户的连接。CREATE USER
CREATE USER
需要CREATE USER
权限DROP USER
DROP USER
需要CREATE USER
权限ALTER USER
ALTER USER
需要CREATE USER
权限。GRANT
GRANT
需要GRANT
权限并且拥有GRANT
所赋予的权限。如果在
GRANTS
语句中创建用户,需要有CREATE USER
权限。GRANT ROLE
操作需要拥有SUPER
或者ROLE_ADMIN
权限。REVOKE
REVOKE
需要GRANT
权限并且拥有REVOKE
所指定要撤销的权限。REVOKE ROLE
操作需要拥有SUPER
或者ROLE_ADMIN
权限。SET GLOBAL 【TODO】
使用
SET GLOBAL
设置全局变量需要拥有SUPER
权限。HANDLE 【TODO】
需要拥有
SUPER
权限。KILL 【TODO】
使用
KILL
终止其他用户的会话需要拥有SUPER
权限。生效时机
启动时,将一些权限检查的表加载到内存,之后使用缓存的数据来验证权限。系统会周期性的将授权表从数据库同步到缓存,生效则是由同步的周期决定,目前这个值设定的是 10秒钟。
修改了授权表,如果需要立即生效,可以手动调用:[暂未实现]
FLUSH PRIVILEGES; #TODO