sp_column_privileges (Transact-SQL)
返回当前环境中单个表的列特权信息。
语法
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) 默认的表可见性规则。如果当前用户拥有具有指定名称的表,则返回该表的列。如果没有指定 table_owner,并且当前用户没有指定了 table_name 参数的表,则 sp_column权限将在数据库所有者拥有的表中查找指定了 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 表示 sys.columns 表中列出的列名。column 可包含使用基础 DBMS 的通配符匹配模式的通配符。为了达到最佳的互操作性,网关客户端应只采用符合 ISO 标准的模式匹配(% 和 _ 通配符)。
结果集
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 |
向列出的 GRANTEE 授予对此 COLUMN_NAME 的权限的数据库用户名。在 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) 向表中插入新行时,GRANTEE 可以为此列提供数据。 UPDATE = GRANTEE 可以修改列中的现有数据。 REFERENCES = GRANTEE 可以引用主键/外键关系中外表中的列。主键/外键关系是使用表约束定义的。 |
IS_GRANTABLE |
varchar(3) |
指明是否允许 GRANTEE 为其他用户授予权限,经常称为“授予再授予”(grant with grant) 权限。可以是 YES、NO 或 NULL。未知值或 NULL 值表示不能使用“授予再授予”(grant with grant) 的数据源。 |
注释
使用 SQL Server,可以用 GRANT 语句授予权限,用 REVOKE 语句除去权限。
权限
需要对架构的 SELECT 权限。
示例
以下示例返回特定列的列特权信息。
USE AdventureWorks;
GO
EXEC sp_column_privileges @table_name = 'Employee'
,@table_owner = 'HumanResources'
,@@table_qualifier = 'AdventureWorks'
,@@column_name = 'SalariedFlag';