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

时间:2019-11-26 07:57:58

标签: sql-server access sql-server-2017

我收到了我们开发人员的要求,

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

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

授予dbcreator并拒绝对现有dbcreator的访问,还是有更好的方法?

1 个答案:

答案 0 :(得分: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