Sql 如何允许对列中的单个记录使用Select权限?

Sql 如何允许对列中的单个记录使用Select权限?,sql,select,permissions,Sql,Select,Permissions,目标是允许所有有权访问教员表的教师仅对自己的社会保险号码拥有选择权限,而不是对所有其他人。你们有谁知道我怎么能做这样的事吗?我的所有用户都设置为Windows用户,我有一个名为教师的Windows组,如果这有帮助的话 我知道在SQL server中使用标准权限是不可能的 您需要在代码中实现这种约束 从理论上讲,您可以传入SS并基于此进行查询,如果它们不匹配,则会引发错误。社会保险号码应该加密,以便在调用记录时无法看到彼此的号码。您可以使用解密过程来允许他们解密,该过程将根据配置文件id检查用户i

目标是允许所有有权访问教员表的教师仅对自己的社会保险号码拥有选择权限,而不是对所有其他人。你们有谁知道我怎么能做这样的事吗?我的所有用户都设置为Windows用户,我有一个名为教师的Windows组,如果这有帮助的话

我知道在SQL server中使用标准权限是不可能的

您需要在代码中实现这种约束


从理论上讲,您可以传入SS并基于此进行查询,如果它们不匹配,则会引发错误。

社会保险号码应该加密,以便在调用记录时无法看到彼此的号码。您可以使用解密过程来允许他们解密,该过程将根据配置文件id检查用户id,并且仅当它们匹配时才会解密。

实现行级权限 行级权限用于在单个表中存储信息的应用程序。每一行都有一列,定义一个区分参数,例如用户名、标签或其他标识符。然后创建参数化存储过程,并传入适当的值。用户只能看到与提供的值匹配的行。 以下步骤描述如何基于用户名或登录名配置行级权限。 创建表,添加一个附加列来存储名称。 创建具有基于用户名列的WHERE子句的视图。这将限制返回到具有指定值的行。使用其中一个内置函数指定数据库用户或登录名。这样就不需要为不同的用户创建不同的视图。 '返回用户的登录标识名。 其中UserName=SUSER\u SNAME

' USER_NAME or CURRENT_USER Return the database user name.
WHERE UserName = CURRENT_USER()
创建存储过程以基于视图而不是基表选择、插入、更新和删除数据。该视图提供了一个过滤器,用于限制返回或修改的行。 对于插入数据的存储过程,使用视图的WHERE子句中指定的相同函数捕获用户名,并将该值插入UserName列。 拒绝公共角色对表和视图的所有权限。用户将无法从其他数据库角色继承权限,因为WHERE子句基于用户名或登录名,而不是基于角色。
将存储过程上的EXECUTE授予数据库角色。用户只能通过提供的存储过程访问数据。

使用视图,选择。。。其中ssid=ssidcurrent\u user,授予对视图的访问权。如果我创建一个解密过程,我认为这将是最好的选择。我要找出如何做到这一点,然后再和大家联系。非常感谢。