DLA的权限操作的基本体验

DLA的权限操作的基本体验

一、DLA的权限模型

DLA是有自己的账号体系(与阿里云的账号不同),基于此DLA做了两层权限验证机制,确保您的数据被安全访问:

二、DLA层校验原理

DLA是根据用户操作对象的范围“从大到小”验证的,从Global级(全局权限),到Schema级,再到Table级,最后到Column级(目前不支持)一层层验证权限。MySQL/DLA的权限遵循“正向白名单”机制,任何一层有权限就校验成功,到最后一层也没权限时校验失败:


正向白名单校验机制

三、DLA层授权方法

基本上参考了MySQL的Grant/Revoke/Show Grants/Show users等语法来实现:

-- 用户相关
select user();    --获取当前用户的名称
select current_user();  --获取当前用户的名称
show users();  -- 展示所有账号的列表,只有root才会看到其他账号;
 
-- grant相关
GRANT {SELECT | SHOW | ALTER | DROP | CREATE | INSERT | UPDATE | DELETE | GRANT OPTION | ALL | ALL PRIVILEGES | USAGE }
ON {* | *.* | xxDb.* | xxDb.yyTable | yyTable }
TO { oa_1234546 | 'oa_123456' | 'oa_123456'@'1.2.3.4'}
[WITH grant option]

-- revoke相关
REVOKE {SELECT | SHOW | ALTER | DROP | CREATE | INSERT | UPDATE | DELETE |GRANT OPTION |  ALL | ALL PRIVILEGES | USAGE}
ON {* | *.* | xxDb.* | xxDb.yyTable  | yyTable }
FROM { oa_1234546 | 'oa_123456' | 'oa_123456'@'1.2.3.4'}

-- show grants相关
SHOW GRANTS 
[for [ current_user | current_user() | oa_123456 | 'oa_123456' | 'oa_123456'@'localhost'] ]

相关概念说明:

(当前授权人) grant 权限列表 on 资源列表 to 被授权人信息 [with grant option]
(当前授权人) revoke 权限列表 on 资源列表 from 被授权人信息
  • 授权人:
    • 只能由DLA的root账号给其他非Root账号授权;
    • 暂时不支持非Root账号给其他账号授权;
    • 不能跨云账号授权和回收权限;


  • 权限列表:
    • 可以用 ',' 连接在一起,比如:SELECT,DELETE,UPDATE,INSERT,...
    • 有ALL或ALL PRIVILEGES就会全部授权或者全部回收,无视其他的Privilege;但一定要注意,grant option这个权限本身,不包含在ALL中,必须显式授权或者回收;
    • 暂时不支持其他类型的授权;
    • SELECT是为Query授权;
    • SHOW为show、use命令授权(这里与mysql的逻辑差异比较大);
    • ALTER为alter或其他变更型的ddl授权;
    • CREATE、DROP、INSERT、UPDATE、DELETE为对应类型的DDL或DML授权;
    • GRANT OPTION为dcl授权(grant和revoke相关);可以在Privilege中指定GRANT OPTION,也可以通过语句片段with grant option来做grant 授权;
    • USAGE表示基本的使用能力;


  • 资源列表:
    • * 假设了 当前连接已经使用了某个库xxDB 的前提下,然后针对xxDB做授权,Schema级别权限;
    • . 表示所有库的所有表授权,Global级别权限;
    • xxDb.* 表示针对xxDB这个库做授权,Schema级别权限;
    • xxDb.yyTable 表示针对xxDB库的xxTable做授权,Schema级别权限;
    • yyTable 假设了 当前连接已经使用了某个库xxDB 的前提下针对xxDB库的xxTable做授权,Table级别权限;
    • 暂时不支持Column级别的授权;


  • 被授权用户定义:
    • 直接写用户名:oa_123456
    • 用户字符串来表示:'oa_123456'
    • 用户@地址:'oa_123456'@'1.1.1.1',但目前即使写了ip、host信息,也不会用于连接的白名单校验;


  • 针对SHOW GRANTS等约束:
    • 只有相同云账号下的Root用户才能为别人show grants;
    • 不能跨不同uid执行show grant
    • 必须有show权限和grant权限或为本人自己,才能执行show grants;
    • SHOW GRANTS FOR 'jeffrey'@'localhost':目前不支持ip地址;
编辑于 2019-07-29

文章被以下专栏收录