返回当前环境中单个表的列特权信息。
sp_column_privileges [ @table_name = ] 'table_name'
[ , [ @table_owner = ] 'table_owner' ]
[ , [ @table_qualifier = ] 'table_qualifier' ]
[ , [ @column_name = ] 'column' ]
[@table_name =] 'table_name'
用来返回目录信息的表。table_name 的数据类型为 sysname,没有默认值。不支持通配符模式匹配。
[@table_owner =] 'table_owner'
是用于返回目录信息的表所有者。table_owner 的数据类型为 sysname,默认值为 NULL。不支持通配符模式匹配。如果没有指定 table_owner,则应用基础数据库管理系统 (DBMS) 默认的表的可视性规则。
在 Microsoft® SQL Server™ 中,如果当前用户拥有的表具有指定名称,则返回该表的列。如果没有指定 table_owner,并且当前用户不拥有指定 table_name 的表,则 sp_column_privileges 搜索数据库所有者拥有的指定 table_name 的表。如果有,则返回该表的列。
[@table_qualifier =] 'table_qualifier'
是表限定符的名称。table_qualifier 的数据类型为 sysname,默认值为 NULL。多种 DBMS 产品支持表的三部分命名方式 (qualifier.owner.name)。在 SQL Server 中,该列表示数据库名。在某些产品中,该列表示表所在数据库环境的服务器名。
[@column_name =] 'column'
是只获得一列目录信息时所使用的单个列。column 的数据类型为 nvarchar(384),默认值为 NULL。如果没有指定 column,将返回所有列。在 SQL Server 中,column 表示在 syscolumns 表中列出的列名。使用基础 DBMS 的通配符匹配模式,column 可以包含通配符。若要获得最佳的互操作性,网关客户端应假定只有 SQL-92 标准模式匹配(% 和 _ 通配符)。
sp_column_privileges 与 ODBC 中的 SQLColumnPrivileges 等价。返回的结果按 TABLE_QUALIFIER、TABLE_OWNER、TABLE_NAME、COLUMN_NAME 和 PRIVILEGE排序。
列名 | 数据类型 | 描述 |
---|---|---|
TABLE_QUALIFIER | sysname | 表限定符名称。该字段可以为 NULL。 |
TABLE_OWNER | sysname | 表所有者名称。该字段始终返回值。 |
TABLE_NAME | sysname | 表名。该字段始终返回值。 |
COLUMN_NAME | sysname | 所返回的 TABLE_NAME 每列的列名。该字段始终返回值。 |
GRANTOR | sysname | 将 COLUMN_NAME 上的权限授予所列 GRANTEE 的数据库用户名。在 SQL Server 中,该列总是和 TABLE_OWNER 相同。该字段始终返回值。
GRANTOR 列可以是数据库所有者 (TABLE_OWNER) 或数据库所有者通过 GRANT 语句中的 WITH GRANT OPTION 子句对其授予权限的用户。 |
GRANTEE | sysname | 由所列 GRANTOR 授予 COLUMN_NAME 上的权限的数据库用户名。在 SQL Server 中,该列总是包括来自 sysusers 表的数据库用户。该字段始终返回值。 |
PRIVILEGE | varchar(32) | 可用列权限中的一个。列权限可以是下列值中的一个(或定义执行时数据源支持的其它值):
SELECT = GRANTEE 可以检索列的数据。 INSERT = GRANTEE 向表插入新行时可以为该列提供数据。 UPDATE = GRANTEE 可以修改列中的现有数据。 REFERENCES = GRANTEE 可以引用主键/外键关系中外表中的列。主键/外键关系使用表约束定义。 |
IS_GRANTABLE | varchar(3) | 指出是否允许 GRANTEE 为其他用户授予权限,经常称为"授予再授予 (grant with grant)"。可以是 YES、NO 或 NULL。未知的(或 NULL)值引用不能使用"授予再授予 (grant with grant)"的数据源。 |
对于 SQL Server,可以用 GRANT 语句授予权限,用 REVOKE 语句除去权限。
执行许可权限默认授予 public 角色。
下面的示例返回表的列特权信息。
EXEC sp_column_privileges Employees