如何在 SQL Server Express 2008 中以非交互方式使数据库用户具有某些数据库角色成员身份

发布于 2024-08-15 08:25:37 字数 954 浏览 2 评论 0原文

首先简单介绍一下。

我们有一个 SQL Server Express 2008 数据库,其架构以脚本的形式保存在源代码管理中,最初是通过在 Management Studio 中打开数据库的上下文菜单并选择“任务|生成脚本...”来创建的。 。

每个开发人员都有一个本地 SQL Server Express 2008 数据库,还有一个供 CI 服务器使用的中央 SQL Server 2008 数据库。每当开发人员更改本地数据库的模式时,他都会重新生成脚本,将它们与源代码一起提交,并更新 CI 服务器使用的中央数据库上的模式。

有时,更改是巨大的,只需删除整个数据库并使用脚本从头开始创建它会更容易,这非常简单。

但是,有一个问题。尽管这些脚本确实创建了正确的数据库用户(例如 ServerUser),但它们不会向该用户授予应用程序所需的 db_owner 角色成员资格。开发人员必须记住在 Management Studio 中打开 ServerUser 用户的属性对话框,并选中数据库角色成员资格列表中的db_owner复选框。不用说,我们经常忘记这一步。我自己刚刚浪费了大约一个小时试图找出服务器无法启动的原因。

作为一个有点天真的人,我认为我可以使用简单的 sql insert 语句来操作 [master].[sys].[database_role_members] 目录,以自动添加必要的角色成员身份,作为脚本的一部分执行。当然,失败并显示错误消息不允许对系统目录进行临时更新。。愚蠢的我。

无论如何,我的问题是这样的。我们能否在创建数据库和 ServerUser 时运行 SQL 脚本,从而使该用户拥有新数据库的 db_owner 角色成员身份?

谢谢。

First a little introduction.

We have an SQL Server Express 2008 database, which schema is kept in the source control in the form of the scripts, originally created by opening the context menu on the database in the Management Studio and selecting Tasks|Generate Scripts ....

Each developer has a local SQL Server Express 2008 database and there is one central SQL Server 2008 database used by the CI server. Any time a developer changes the schema of the local database, (s)he regenerates the scripts, commits them along with the source code and updates the schema on the central database used by CI server.

Sometimes, the changes are vast and it is easier to simply delete the entire database and create it from scratch using the scripts, which is really easy.

BUT, there is one problem. Although, the scripts do create the right database user (say ServerUser), they do not grant that user the db_owner role membership required by the application. The developer must remember to open the properties dialog on the ServerUser user in Management Studio and check the db_owner checkbox in the Database role membership list. Needless to say, we forget this step frequently. I, myself, have just wasted about an hour trying to figure out why the server does not start.

Being somewhat a naive person, I thought I could manipulate the [master].[sys].[database_role_members] catalog with a simple sql insert statement to add the necessary role membership automatically, as part of the scripts execution. Of course, that failed with the error message Ad hoc updates to system catalogs are not allowed.. Stupid me.

Anyway, my question is this. Can we have an SQL script to be run when the database and the ServerUser are created, which would make this user have the db_owner role membership for the new database?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

若相惜即相离 2024-08-22 08:25:37

您可以使用 sp_addrolemember。

http://msdn.microsoft.com/en-us/library/ms187750。 ASPX

EXEC sp_addrolemember 'db_owner', 'username'

You can use sp_addrolemember.

http://msdn.microsoft.com/en-us/library/ms187750.aspx

EXEC sp_addrolemember 'db_owner', 'username'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文