Sql Server 2012上有一个数据库。服务器拥有属于不同角色的用户。该应用程序是用C#编写的。它通过SqlConnection连接到数据库。在Sql Connection中,我使用用户所声明的用户名和密码构建连接字符串。
我需要知道如何识别用户在数据库中所属的角色,以便我可以正确配置我的应用程序。如何找出用户拥有的角色,以便我可以通过单一登录窗口登录,但根据用户的数据库角色将用户重定向到不同的窗口。
答案 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)
不应在连接字符串级别上进行授权,而应在应用程序的业务逻辑中进行授权。
当用户登录时,您会检查他的角色,并根据您的角色决定他能做什么/不能做什么。