GRANT操作:
- 给云数据库ClickHouse的用户或角色赋予 权限
- 将角色分配给用户或其他角色
取消权限,使用 REVOKE语句。查看已授权的权限请使用 SHOW GRANTS。
授权操作语法
GRANT [ON CLUSTER cluster_name] privilege [(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*} TO {user| role |CURRENT_USER} [,...] [WITH GRANT OPTION] [WITH REPLACE OPTION]
privilege
— 权限类型role
— 用户角色user
— 用户账号
WITH GRANT OPTION
授予 user
或 role
执行 GRANT
操作的权限。用户可将在自身权限范围内的权限进行授权 WITH REPLACE OPTION
以当前sql里的新权限替代掉 user
或 role
的旧权限,如果没有该选项则是追加授权。
角色分配的语法
GRANT [ON CLUSTER cluster_name] role [,...] TO {user| another_role |CURRENT_USER} [,...] [WITH ADMIN OPTION] [WITH REPLACE OPTION]
-
role
— 角色 -
user
— 用户WITH ADMIN OPTION
授予user
或role
执行ADMIN OPTION 的权限WITH REPLACE OPTION
以当前sql里的新role替代掉user
或role
的旧role,如果没有该选项则是追加roles。
用法
使用 GRANT
,你的账号必须有 GRANT OPTION
的权限。用户只能将在自身权限范围内的权限进行授权。
例如,管理员有权通过下面的语句给 john
账号添加授权:
GRANT SELECT (x,y) ON db.table TO john WITH GRANT OPTION
这意味着 john
有权限执行以下操作:
SELECT x,y FROM db.table
SELECT x FROM db.table
SELECT y FROM db.table
john
不能执行 SELECT z FROM db.table
。同样的 SELECT * FROM db.table
也是不允许的。执行这个查询时,CH不会返回任何数据,甚至 x
和 y
列。唯一的例外是,当表仅包含 x
和 y
列时。这种情况下,CH返回所有数据。
同样 john
有权执行 GRANT OPTION
,因此他能给其它账号进行和自己账号权限范围相同的授权。
可以使用 *
号代替表或库名进行授权操作。例如, GRANT SELECT ON db.* TO john
操作运行 john
对 db
库的所有表执行 SELECT
查询。同样,你可以忽略库名。在这种情形下,权限将指向当前的数据库。例如, GRANT SELECT ON* to john
对当前数据库的所有表指定授权, GRANT SELECT ON mytable to john
对当前数据库的 mytable
表进行授权。
访问 systen
数据库总是被允许的(因为这个数据库用来处理sql操作) 可以一次给多个账号进行多种授权操作。 GRANT SELECT,INSERT ON *.* TO john,robin
允许 john
和 robin
账号对任意数据库的任意表执行 INSERT
和 SELECT
操作。