SQL Server里使用 VIEW DEFINITION 权限

根据 MSDN:VIEW DEFINITION 权限允许用户查看授予权限的安全对象的元数据。 但是,VIEW DEFINITION 权限不授予对安全对象本身的访问权限。 例如,仅被授予对表的 VIEW DEFINITION 权限的用户可以在 sys.objects 目录视图中查看与该表相关的元数据。 但是,如果没有 SELECTCONTROL 等附加权限,用户将无法从表中读取数据。

如果您的用户在数据库中具有 db_reader 权限并且他/她试图生成表/对象的模式,他将无法执行此操作。 您必须允许他/她这样做,这就是 VIEW DEFINATION 提供帮助的地方。

USE [master]
GO
CREATE LOGIN [TestLogin] WITH PASSWORD=N'testing', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [AdventureWorks2012]
GO
CREATE USER [TestLogin] FOR LOGIN [TestLogin]
GO
USE [AdventureWorks2012]
GO
ALTER ROLE [db_datareader] ADD MEMBER [TestLogin]
GO

现在使用 TestLogin 登录到您的 SQL Server 并尝试为表生成架构,您将无法执行此操作。 让我们授予查看定义权限。

  1. Database level
  2. Schema Level
  3. Individual Entity

让我们用 TSQL 脚本查看每个权限

--允许为 HumanResources Schema 下的所有对象生成脚本
GRANT VIEW DEFINITION ON SCHEMA :: HumanResources TO TestLogin;

--允许为 AdventureWOrks2012 数据库下的所有对象生成脚本
GRANT VIEW DEFINITION ON DATABASE :: AdventureWOrks2012 TO TestLogin;

--允许为 Person.Address 表生成脚本
GRANT VIEW DEFINITION ON OBJECT :: Person.Address TO TestLogin;

VIEW DEFINITION权限

可以在以下级别授予 VIEW DEFINITION 权限:

  • Server 作用域
  • Database 作用域
  • Schema 作用域
  • 单独实体(Individual entities)

Server 作用域

在此作用域内授予的 VIEW ANY DEFINITION 权限,可有效地取消被授权者基于权限的元数据访问权限。 这意味着被授权者可以看到 SQL Server 实例中的所有元数据,除非被授权者在数据库范围、架构范围或单个实体(如表)中被拒绝 VIEW DEFINITIONCONTROL 权限。

权限名称在服务器作用域内为 VIEW ANY DEFINITION,但在所有其他作用域内为 VIEW DEFINITION

Database 作用域

在此作用域内授予的 VIEW DEFINITION 权限可有效地取消指定数据库中被授权者基于权限的元数据访问权限。这意味着被授权者可以看到执行 GRANT 语句的数据库上下文中的所有元数据,除非被授权者在架构作用域内或针对单独实体(例如表)中被拒绝 VIEW DEFINITION 或 CONTROL 权限。

Schema 作用域

使用在此作用域内授予的 VIEW DEFINITION 权限,被授权者可以查看指定架构中包含的所有对象的所有元数据,除非被授权者被拒绝对架构中的单个实体具有 VIEW DEFINITIONCONTROL 权限。

单独实体(Individual entities)

授权个别实体的 VIEW DEFINITION ,被授权者可以查看指定实体的元数据。

您可以向用户授权对安全对象(例如表)的 VIEW DEFINITION 权限。 这使用户可以查看表的元数据以及与表相关的任何子组件,例如触发器、约束和索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值