授予数据库的完整 SQL Server 权限

Posted

技术标签:

【中文标题】授予数据库的完整 SQL Server 权限【英文标题】:Granting Full SQL Server Permissions for a Database 【发布时间】:2019-04-30 18:39:43 【问题描述】:

如何让用户(创建时未登录)完全控制包含的数据库,而不必指定该数据库的名称,例如 GRANT CONTROL ON DATABASE::DatabaseName TO UserName,但不使用数据库名称?我认为它将包括 GRANT ALTER ANY SCHEMA TO UserName,但我不确定我还需要授予什么,或者是否有更好的方法。谢谢。

【问题讨论】:

user 在这里是一个加载项。您是指 Windows 登录、服务器级 SQL Auth 登录、该数据库中包含的用户,还是其他? “完全控制”是指他们可以该数据库中执行任何操作(创建对象、读取和写入数据等),或者也可以执行任何操作(重命名它、备份、删除等)? 好点。我编辑了我的问题,提到用户是在没有登录的情况下创建的)。 我希望他们能够在该数据库中做任何事情,而不是对它(根据您的示例)。 【参考方案1】:

如果您真的希望他们能够在该数据库中执行任何操作,您只需将他们添加到db_owner 角色:

USE ContainedDatabase;
GO
ALTER ROLE db_owner ADD MEMBER [username];

如果您想更细化,可以将它们添加到较小的角色中,例如db_ddladmindb_securityadmin 等。您可以在此处查看内置角色列表:

Database-Level Roles

每个角色固有的权限:

Permissions of Fixed Database Roles

如果这些不适合,您可以create your own roles,将您的用户添加到该角色,并为您创建的该角色授予特定权限(和/或将它们添加到其他角色)。将权限应用到角色而不是直接应用到用户之间的区别只是重用 - 如果您再添加五个要应用相同权限的用户,您只需将它们添加到自定义角色,而不是应用那些细粒度的权限或所有 5 个用户的角色。

【讨论】:

这正是我所需要的。为了完整起见,您能否告诉我需要哪些 GRANT(没有数据库名称)来执行与将用户添加到 db_owner 相同的操作? GRANT CONTROL DATABASE - 这与db_owner 中的情况并不完全相同,但它与您将获得的一样接近。这是第二个链接。【参考方案2】:
    打开 SQL Server Management Studio 并连接到您的服务器。 在对象资源管理器中,展开服务器下的“Security”文件夹。 右键单击“登录”文件夹并选择“新建登录...” 以“域\用户名”格式添加用户名。您也可以通过将其更改为“Domain\GroupName”来添加域组。 5.如果您希望此用户拥有对 SQL Server 实例的完全访问权限,您可以选择“服务器角色”选项卡。添加角色“sysadmin”将赋予他们对服务器的完全访问权限,以执行更新数据库、备份数据库、删除数据库等操作。

    单击确定,您的用户将被创建并可以访问您的数据库。

    选择“用户映射”选项卡。在此屏幕的上半部分,选中数据库名称旁边的框。突出显示数据库并选中复选框以将用户映射到数据库后,您可以向用户添加角色成员资格。用于访问数据库。

    单击确定,您的用户将被创建并可以访问您的数据库。

【讨论】:

以上是关于授予数据库的完整 SQL Server 权限的主要内容,如果未能解决你的问题,请参考以下文章

如何授予用户对 SQL Server 中数据库的读取权限?

如何向 sql server 用户授予 sendmail 权限?

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

用于授予 SQL Server Reporting Services 用户权限的 SQL 脚本

SQL Server 授予的权限不起作用

SQL Server - 授予对所有现有和未来数据库的读取访问权限的登录权限