Lee*_*DBA 5 security sql-server sql-server-2012
我在 TFS 2012 中有一个 SQL Server 数据库项目 (.NET 4.5)。作为 DBA,我正在寻找一种机制,开发人员可以通过该机制创建“CREATE USER”sql 脚本并在数据库中分配他们的权限以匹配应用程序,而无需需要知道它最终映射到什么登录名。这是因为我想隐藏实时和测试环境中的登录名,并让 DBA 根据需要在每个环境中创建这些登录名。
如果我进入项目并创建一个新用户,即 [MyApplication],则默认脚本建议使用以下模板:
CREATE USER [MyApplication]
WITHOUT LOGIN
WITH DEFAULT_SCHEMA = dbo
GO
Run Code Online (Sandbox Code Playgroud)
这很棒,因为我可以创建一个映射到无登录的用户,然后在部署时我可以运行:
ALTER USER [MyApplication] WITH LOGIN=[MyApplicationLogin], Name=[MyApplication]
Run Code Online (Sandbox Code Playgroud)
只要将用户映射到 SQL 登录名就可以了。如果登录要映射到 Windows 登录,当我们尝试重新映射时,SQL 会抛出错误:
Msg 33016, Level 16, State 1, Line 1
The user cannot be remapped to a login. Remapping can only be done for users that were
mapped to Windows or SQL logins.Run Code Online (Sandbox Code Playgroud)
所以问题是,在项目中设置它的最佳方法是什么,以便开发人员可以创建一个用户,该用户可以在数据库用户中任意命名,然后我们将如何将其重新映射到 Windows 身份验证登录?
提前致谢!
的想法CREATE USER ... WITHOUT LOGIN 不是这样你可以稍后映射它ALTER USER ... WITH LOGIN(SQL Server 简单地拒绝,正如你所发现的)。
相反,这个想法是让应用程序开发人员在发出 SQL 语句之前更改安全上下文,首先要EXECUTE AS USER = \'<user>\' WITHOUT REVERT放弃权限。
这会让你到达你想去的地方的一半。您最终仍然需要将某些 SQL Server 登录名映射到某些 SQL 数据库用户,但是您减少了提前了解它们是什么的需要,因为您声明了针对“WITHOUT LOGIN”用户的访问控制权限。
\n\n看:
\n\n\n| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |