在 SQL Server 中授予行级权限

某些方案中会要求更为细致地控制访问,而不仅仅是授予、撤消或拒绝对数据的权限。 例如,医院数据库应用程序可能会将患者信息存储在单个表中。 可能需要限制医生仅查看与他们自己的患者相关的信息。 在很多环境中(包括财务、法律、政府和军事应用程序)都存在类似的方案。 不过,SQL Server 并不支持实现行级安全性。 您必须在表中创建附加列以定义行筛选机制。

 

实现行级权限

 


行级权限用于在单个表中存储信息的应用程序。 每行均有一个定义区别性参数的列,如用户名、标签或其他标识符。 然后可以创建参数化存储过程,传入适当的值。 用户只能看到与所提供的值匹配的行。

下面的步骤说明如何基于用户名或登录名配置行级权限。

·             创建表,添加用于存储名称的附加列。

·             基于用户名列创建一个具有 WHERE 子句的视图。 这会将返回行限制为具有指定值的行。 使用内置函数之一指定数据库用户名或登录名。 这样就不必为不同的用户创建不同的视图。

复制

    ' Returns the login identification name of the user.

    WHERE UserName = SUSER_SNAME()

 

    ' USER_NAME or CURRENT_USER Return the database user name.

    WHERE UserName = CURRENT_USER()

 

·             基于视图而不是基表创建用于选择、插入、更新和删除数据的存储过程。 视图提供筛选器,它可限制返回或修改的行。

·             对于插入数据的存储过程,使用视图的 WHERE 子句中指定的同一函数捕获用户名并将该值插入 UserName 列。

·             拒绝 public 角色对表和视图的所有权限。 用户将不能从其他数据库角色继承权限,因为 WHERE 子句基于用户名或登录名而不基于角色。

·             为数据库角色授予对存储过程的 EXECUTE 权限。 用户只能通过提供的存储过程访问数据。

 

以上内容转自:http://msdn.microsoft.com/zh-cn/library/bb669076.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值