授予创建新数据库的用户权限,但拒绝对现有数据库的权限

问题描述 投票:0回答:1

我收到我们开发人员的请求,

  • 他们需要一个需要权限才能创建新数据库的新用户
  • 更改那些,但不能访问现有的。

这种访问的最佳实践是什么?

授予dbcreator并拒绝对现有dbcreator的访问,或者有更好的方法吗?

sql-server access sql-server-2017
1个回答
2
投票

默认情况下,SQL Server dbcreator不授予您访问数据库的权限。似乎是这样,因为在创建新数据库时,您(通常,除非另有说明)是该数据库的自动所有者。数据库的所有者可以在该数据库中进行所有操作。

但是,如果登录名具有dbcreator的服务器角色,他们仍然可以删除不拥有的数据库。他们可以创建新数据库或更改现有数据库。

如果您的目的是纯粹允许他们创建新数据库并仅管理它们。您应该只给他们创建权限。

USE MASTER
GO
GRANT CREATE ANY DATABASE TO Foo
GO

这仍然允许他们对创建的数据库运行ALTER语句(因为它们是所述数据库的所有者)。但不要对现有数据库运行alter(或drop)语句。

USE MASTER
GO
CREATE DATABASE [OwnedDB] --Succeeds
GO
ALTER DATABASE [OwnedDB] SET RECOVERY SIMPLE WITH NO_WAIT --Succeeds
GO
ALTER DATABASE [UnownedDB] SET RECOVERY SIMPLE WITH NO_WAIT --Fails due to permissions
GO
© www.soinside.com 2019 - 2024. All rights reserved.