ADO.NET 如何识别用户在数据库中的角色?
ADO.NET how to identify a user's roles in the database?
Sql 服务器 2012 上有一个数据库。该服务器具有属于不同角色的用户。该应用程序是用 C# 编写的。它通过 SqlConnection 连接到数据库。在 Sql 连接中,我使用用户指定的用户名和密码构建连接字符串。
我需要知道如何识别用户在数据库中属于哪些角色,以便我可以适当地配置我的应用程序。我如何找出用户拥有的角色,以便我可以通过单一登录 window 登录,但根据他们的数据库角色将用户重定向到不同的 windows。
授权不应在连接字符串级别进行,而应在应用程序的业务逻辑中进行。
当用户登录时,您会检查他的角色,并据此决定他can/can不做什么。
我想他是在问如何知道用户在数据库中的角色,以便他可以适当地配置他的应用程序。可以要求用户提供他们的用户名和密码,并将其构建到连接字符串中以访问数据库。这仅在数据库配置为授予他们访问权限的情况下正确地限制了用户访问权限,这是在 SQL 服务器中创建的用户和角色 - 以验证和授权通过任何应用程序连接到数据库的用户。
但是如果您想知道它们在数据库中的角色,以便您可以适当地配置您的应用程序,您将需要从 SQL 服务器中的安全目录视图中读取。这些视图与您创建的任何其他视图一样,只是它们已经为您创建了。您可以使用 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 阅读有关这些安全目录的更多信息。
Sql 服务器 2012 上有一个数据库。该服务器具有属于不同角色的用户。该应用程序是用 C# 编写的。它通过 SqlConnection 连接到数据库。在 Sql 连接中,我使用用户指定的用户名和密码构建连接字符串。
我需要知道如何识别用户在数据库中属于哪些角色,以便我可以适当地配置我的应用程序。我如何找出用户拥有的角色,以便我可以通过单一登录 window 登录,但根据他们的数据库角色将用户重定向到不同的 windows。
授权不应在连接字符串级别进行,而应在应用程序的业务逻辑中进行。
当用户登录时,您会检查他的角色,并据此决定他can/can不做什么。
我想他是在问如何知道用户在数据库中的角色,以便他可以适当地配置他的应用程序。可以要求用户提供他们的用户名和密码,并将其构建到连接字符串中以访问数据库。这仅在数据库配置为授予他们访问权限的情况下正确地限制了用户访问权限,这是在 SQL 服务器中创建的用户和角色 - 以验证和授权通过任何应用程序连接到数据库的用户。
但是如果您想知道它们在数据库中的角色,以便您可以适当地配置您的应用程序,您将需要从 SQL 服务器中的安全目录视图中读取。这些视图与您创建的任何其他视图一样,只是它们已经为您创建了。您可以使用 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 阅读有关这些安全目录的更多信息。