【问题标题】:How can I allow Select permissions to a single record in a column?如何允许对列中的单个记录选择权限?
【发布时间】:2015-02-19 23:15:08
【问题描述】:

目标是允许所有有权访问 Faculty 表的“教师”仅对他们自己的社会安全号码而不是其他所有人拥有 Select 权限。你们有谁知道我怎么能做这样的事情吗?我确实将所有用户设置为 Windows 用户,并且我有一个名为 Teachers 的 Windows 组,如果有帮助的话。

【问题讨论】:

  • 使用视图,“select ... where ssid = ssid(current_user)”,授予对视图的访问权限。

标签: sql select permissions


【解决方案1】:

无法在 SQL Server 中使用标准权限(据我所知)

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

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

【讨论】:

    【解决方案2】:

    社会安全号码应该被加密,这样他们在调用记录时就看不到彼此的号码。您可以使用解密过程来允许他们解密,检查用户 ID 与配置文件 ID,并且只有在它们匹配时才会解密。

    【讨论】:

    • 我认为这将是最好的选择,如果我创建一个解密过程。我将找出如何做到这一点并回复给大家。非常感谢 HLGEM。
    【解决方案3】:

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

    ' USER_NAME or CURRENT_USER Return the database user name.
    WHERE UserName = CURRENT_USER()
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多