MySQL中的列级权限可以对表中的指定列授权,更加粒度地控制数据访问。它有以下语法:
sql
GRANT privilege (column_name)
ON table_name TO user;
例如:
sql
GRANT SELECT (name)
ON employees TO 'john'@'localhost';
这将授予john用户仅对employees表的name列的SELECT权限。
主要权限类型:
- SELECT:授予对指定列的读取权限。
- INSERT:授予对指定列的插入权限。
- UPDATE:授予对指定列的更新权限。
- REFERENCES:授予对指定列的外键约束权限。
权限扩展:
- WITH GRANT OPTION:允许用户将权限转授给其他用户。
- ALL:定义除GRANT OPTION之外的所有权限。
例1:授予john对products表的name和price列的全部权限
sql
GRANT ALL (name, price)
ON products TO 'john'@'localhost'
WITH GRANT OPTION;
john用户可以选择性地将这些权限授予其他用户。
例2:撤销权限
sql
REVOKE UPDATE (name)
ON products FROM 'john'@'localhost';
这将撤销john用户对products表name列的UPDATE权限。
总结:
- 列级权限可以更加细致地控制表中的敏感数据,避免过度授权。
- 必须拥有对表的相应权限才能定义列级权限。
- 可以通过REVOKE语句回收权限。
- 列级权限和表级权限可以同时使用。