查看对象定义
查看数据库对象的 Transact-SQL 源代码的规则比查看元数据的规则更加严格。若要查看对象的 Transact-SQL 定义,用户必须拥有对象,或已授予有关对象的下列权限之一:
CONTROL
ALTER
TAKE OWNERSHIP
VIEW DEFINITION
下面是如何使用这些规则的一些示例:
如果授予用户对表 myTable 的 ALTER 权限,则该用户可以查看与下表中列出的每个目录视图内 definition 列中的表相关的子组件的 Transact-SQL 定义。如果用户不具有上述权限之一或不拥有对象,则目录视图的 definition 列中的 Transact-SQL 定义为 NULL。
如果用户不是 myTable 表的所有者,并且仅被授予对表的 SELECT 权限,则当用户访问下列目录视图时,definition 列为 NULL。
目录视图名称
Transact-SQL 定义的适用范围
sys.sql_modules
mytable 中的所有触发器
sys.computed_columns
myTable 中的所有计算列
sys.check_constraints
myTable 中的所有 CHECK 约束
sys.default_constraints
myTable 中的所有 DEFAULT 约束
假设授予用户对过程 myProcedure 的 EXECUTE 权限。当用户尝试通过访问 sys.sql_modules 目录视图查看过程的 Transact-SQL 定义时,definition 列具有空值。相反,如果授予用户对 myProcedure 的 TAKE OWNERSHIP 权限,则用户将查看 sys.sql_modules 的 definition 列中过程的 Transact-SQL 定义。