如果我有一个包含单列敏感数据的表,并且我想在不公开该列的情况下授予该表的广泛使用权,我知道我可以创建一个 VIEW,使他们能够访问所有非敏感列。但是,PostgreSQL 允许您以以下形式授予列级权限
grant select (col1, ...coln) on table to role;
是否有其他引擎提供此功能?
如果我有一个包含单列敏感数据的表,并且我想在不公开该列的情况下授予该表的广泛使用权,我知道我可以创建一个 VIEW,使他们能够访问所有非敏感列。但是,PostgreSQL 允许您以以下形式授予列级权限
grant select (col1, ...coln) on table to role;
是否有其他引擎提供此功能?
SQL Server 2000、2005、2008 具有此功能
添加
在 SQL Server 2005、2008 中,可以使用对称加密来加密一列数据,请参阅B.Symmetric encryption that includes an authenticator。此变体返回NULL 值,就好像使用了错误的键一样。
这是一个 SQL 标准功能。“大多数”SQL 实现都支持它,包括 PostgreSQL、MySQL、Oracle、DB2、SQL Server。
在 Oracle 中,这称为列屏蔽。
正如@igor 所说,SQL Server 具有这种能力。我回想起 Sybase 时代,即 4.2 版。我确定稍后(可能是 SQL-Server 7.0)我听到建议不要使用该功能,而是使用视图或存储过程,
MySQL 还可以对列权限执行GRANT和REVOKE 。
事实上,mysql.columns_priv 和 information_schema.COLUMN_PRIVILEGES 包含该级别的那些特权。
mysql> show create table mysql.columns_priv\G
* ** * ** * ** * ** * 1. 行* ** * ** * ** * ** *
表:columns_priv
创建表:CREATE TABLE
columns_priv
(Host
char( 60) 整理 utf8_bin NOT NULL DEFAULT '',Db
char(64) 整理 utf8_bin NOT NULL DEFAULT '',User
char(16) 整理 utf8_bin NOT NULL DEFAULT '',Table_name
char(64) 整理 utf8_bin NOT NULL DEFAULT '',Column_name
char(64) COLLATE utf8_bin NOT NULL DEFAULT '',Timestamp
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,Column_priv
set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',PRIMARY KEY (
Host
,Db
,User
,Table_name
,Column_name
)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='列特权'
mysql> show create table information_schema.column_privileges\G
* ** * ** * ** * ** * 1. row * ** * ** * ** * ** *
表:COLUMN_PRIVILEGES
创建表:CREATE TEMPORARY TABLE
COLUMN_PRIVILEGES
(GRANTEE
varchar (81) NOT NULL DEFAULT '',TABLE_CATALOG
varchar(512) NOT NULL DEFAULT '',TABLE_SCHEMA
varchar(64) NOT NULL DEFAULT '',TABLE_NAME
varchar(64) NOT NULL DEFAULT '',COLUMN_NAME
varchar(64) NOT NULL DEFAULT '',PRIVILEGE_TYPE
varchar (64) NOT NULL DEFAULT '',IS_GRANTABLE
varchar(3) NOT NULL DEFAULT '') ENGINE=MEMORY DEFAULT CHARSET=utf8
我认为这通常是通过创建视图并在视图上授予选择来完成的。
我记得更难的问题涉及是否可以以一种有意义的方式授予对视图的插入和/或更新。(显然,视图必须具有维护基础表模式的引用完整性约束所需的所有列)。
然而,这对我来说都是学术性的。我很想从使用视图的人那里阅读一些详细信息,这些人使用视图来管理对列子集的插入/更新访问……或者各种供应商如何实现这些列访问授权。