简化 SQL Server 的登录名/所有者/架构/角色/主体等

Posted

技术标签:

【中文标题】简化 SQL Server 的登录名/所有者/架构/角色/主体等【英文标题】:Simplifying SQL Server's Logins/Owners/Schemas/Roles/Principals etc 【发布时间】:2010-10-26 17:47:50 【问题描述】:

我经常使用 ASP.NET 和 SQL Server 2005 开发小型 Internet 应用程序。我的数据库始终只能由一个应用程序通过 ASP.NET Web 服务或类似服务访问。

当我开发应用程序并在我的开发计算机 (SQLExpress 2008) 和托管服务器 (SQL Server 2005) 之间来回移动数据库时,我最终总是会得到一堆所有者/角色/模式/登录等似乎突然出现并控制了数据库的各个部分。

我只知道 SQL Server 是危险的,我只是想设计数据库,但我总是不得不更改数据库并最终得到各种权限错误(例如,当尝试在传输一个图表后打开图表时)分贝)。

有没有办法简单地告诉 SQL Server Management Studio“嘿,我是唯一会使用这个愚蠢的数据库的人,所以让我来做吧?”

像一些将所有这些部分设置为“dbo”或类似的命令?

【问题讨论】:

【参考方案1】:

我假设您使用的是 Windows。确保您使用 Windows 身份验证连接到 SQL,并为您的帐户提供系统管理员权限。现在您创建的所有内容(创建表表名、创建视图视图名)都将自动拥有 dbo。

【讨论】:

是的,我使用的是 Windows (Vista Ultimate),并且通过具有系统管理员权限的 Windows Auth 登录。但是,我使用的一些数据库取自已上传到托管服务器并在托管服务器上使用 SQL 登录进行修改的旧应用程序。然后我使用发布向导复制到我自己的 SQLExpress 实例并在那里修改。 (或者这个的一些变体。) 您使用 sp_changeobjectowner 将所有对象重置为 dbo。【参考方案2】:

很遗憾,您的问题有几个简单的答案,但您可能不会喜欢它们,因为它们需要您投资于 SQL Server 技能。

您应该查看的第一个工具是 Visual Studio 2008 Database Developer Edition。此版本具有您正在寻找的管理工具来管理架构、用户......我认为这现在包含在 Visual Studio 2008 开发版中

第二种方法是接受 SQL Server 管理,并且对编写 DDL 脚本感到满意。目标是让您能够以可预测的方式将更改部署到 SQL Server,从开发环境到测试并最终部署到生产环境。

【讨论】:

【参考方案3】:

问题的症结在于您在数据库本身来回移动。数据库通过登录到用户映射以及其他设置(如加密密钥、msdb 过程的使用和维护计划等)与它们的主机 SQL 实例紧密耦合。您可以通过仔细使用专用 SQL 身份验证来最大限度地减少一些影响,但这并不能完全消除问题。真正的解决方案是您应该有一个部署脚本并通过执行您之前在开发数据库上测试过的 T-SQL 脚本将更改应用到您的生产数据库,而不是通过“来回”移动数据库.

【讨论】:

好吧,我并不是真的打算从一开始就“来回”移动数据库。但是,如果我正在做一个快速项目,并且我可以从我之前做的另一个项目中窃取 60% 的数据库结构,我想拉下数据库并离线使用它,而不是从从头开始。【参考方案4】:

我创建所有对象,特别指定我希望它们创建为 dbo。

所以我要创建一个过程

创建过程 dbo.myprocname

【讨论】:

以上是关于简化 SQL Server 的登录名/所有者/架构/角色/主体等的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER 2008 服务器登录名角色,数据库用户角色架构知识点总结

SQL Server - 如何将所有数据库的读取权限授予登录名?

怎么在 sql server 2008中创建登录名

SQL SERVER 如何切换 登入的 用户

sql server2005新创建的登录名无法登陆

sql server 2005新建登录名失败,错误码15247.