ADO.NET如何识别用户在数据库中的角色?

时间:2015-12-04 15:00:55

标签: c# .net sql-server ado

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

我需要知道如何识别用户在数据库中所属的角色,以便我可以正确配置我的应用程序。如何找出用户拥有的角色,以便我可以通过单一登录窗口登录,但根据用户的数据库角色将用户重定向到不同的窗口。

2 个答案:

答案 0 :(得分: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了解有关这些安全目录的更多信息。

答案 1 :(得分:-1)

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

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