【问题标题】:ADO.NET how to identify a user's roles in the database? [closed]ADO.NET如何识别用户在数据库中的角色? [关闭]
【发布时间】:2015-12-04 15:00:54
【问题描述】:

Sql Server 2012 上有一个数据库。该服务器有属于不同角色的用户。该应用程序是用 C# 编写的。它通过 SqlConnection 连接到数据库。在 Sql Connection 中,我使用用户指定的用户名和密码构建连接字符串。

我需要知道如何识别用户在数据库中属于什么角色,以便我可以适当地配置我的应用程序。如何找出用户的角色,以便我可以通过单个登录窗口登录,但根据用户的 DB 角色将用户重定向到不同的窗口。

【问题讨论】:

  • 我不明白这里的问题。你能解释一下你想做什么吗?
  • 请添加角色示例以及特定角色的含义(对数据的不同访问权限,应用程序中的不同功能)。您如何使用数据库进行身份验证,每个用户是否使用自己的(SQL Server)帐户进行身份验证?角色是在 SQL Server 安全性中还是在数据库表中定义的?
  • 我想通过单个窗口登录用户,并根据角色重定向到其他窗口
  • @PHeiberg - 我已编辑问题以使 OP 的意图更加清晰。作为一个非英语母语的人,不难弄清楚他在寻找什么,给他相关的答案(他接受了),然后编辑问题,这样其他用户会更清楚地寻找相同的答案信息。

标签: c# .net sql-server ado


【解决方案1】:

我认为他在问如何知道用户在数据库中的角色,以便他可以适当地配置他的应用程序。可以要求用户提供他们的用户名和密码,并将其构建到连接字符串中以访问数据库。这仅在将 db 配置为授予他们访问权限的情况下正确限制用户访问权限,这是在 SQL Server 中创建用户和角色的目的 - 对通过任何应用程序连接到数据库的用户进行身份验证和授权。

但是如果您想知道他们在数据库中的角色,以便您可以适当地配置您的应用程序,您将需要从 SQL Server 中的安全目录视图中读取。这些视图与您创建的任何其他视图一样,只是它们已为您创建。您可以使用 select 语句从它们中读取,就像从您自己的表和视图中读取一样。您可能会专门查看 sys.database_role_members,它将用户与其角色联系起来。如果您使用实际用户的用户名和密码连接到数据库,您仍然可以从这些安全目录中读取,您将只能读取该特定用户的信息,这就是您想要的。

你会使用这样的 select 语句:

SELECT roles.NAME, members.NAME
  FROM sys.database_role_members role_members
       JOIN sys.database_principals roles
         ON role_members.role_principal_id = roles.principal_id
       JOIN sys.database_principals members
         ON role_members.member_principal_id = members.principal_id

您可以在https://msdn.microsoft.com/en-us/library/ms178542.aspx 阅读有关这些安全目录的更多信息。

【讨论】:

  • @MrsEd - 这不是题外话。他的英语显然无法完全清楚地解释他需要什么,但只要有一点洞察力,就可以弄清楚并正确回答。这符合 SO 社区表达的希望更欢迎新用户的愿望,尤其是那些英语不是他们的第一语言的用户。
【解决方案2】:

授权不应在连接字符串级别进行,而应在应用程序的业务逻辑中进行。

当用户登录时,您检查他的角色,并据此决定他可以/不可以做什么。

【讨论】:

  • 这是一个令人困惑的错误答案。要检查用户的角色,应用程序必须连接到数据库。为此,在数据库应用程序中,可以使用该用户指定的用户名和密码来尝试连接到数据库,这意味着将它们放入连接字符串中。如果连接成功,则应用程序可以读取用户的角色。如果连接失败,应用程序可以拒绝提供的用户名和密码。这个过程将涉及所有三层 - i/o、业务和数据。
  • @AgapwIesu 您显然是在混合服务器上的用户角色和应用程序本身的用户权限。
  • 他显然正在构建一个使用 db 用户角色作为应用程序角色的应用程序。一些应用程序正确地做到了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
相关资源
最近更新 更多