授予用户创建新数据库的权限,但拒绝现有数据库的权限
Grant user rights to create new databases but deny rights to existing ones
我收到开发人员的请求,
- 他们需要一个需要创建新数据库权限的新用户
- 改变那些但不应该能够访问现有的。
这种访问的最佳做法是什么?
授予 dbcreator 并拒绝访问现有的或者有更好的方法吗?
默认情况下,SQL 服务器 dbcreator 不授予您访问数据库的权限。看起来是这样,因为当您创建一个新数据库时,您(通常,除非另有说明)自动成为该数据库的所有者。数据库的所有者可以在该数据库中执行所有操作。
但是如果登录名具有 dbcreator 的服务器角色,他们仍然可以删除不属于他们的数据库。他们可以创建新数据库或更改现有数据库。
如果您的意图是纯粹让他们创建新数据库并仅管理这些数据库。您应该只给他们创建权限。
USE MASTER
GO
GRANT CREATE ANY DATABASE TO Foo
GO
这仍然允许他们对他们创建的数据库进行 运行 ALTER 语句(因为他们是所述数据库的所有者)。但不是 运行 改变(或删除)针对现有数据库的语句。
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
我收到开发人员的请求,
- 他们需要一个需要创建新数据库权限的新用户
- 改变那些但不应该能够访问现有的。
这种访问的最佳做法是什么?
授予 dbcreator 并拒绝访问现有的或者有更好的方法吗?
默认情况下,SQL 服务器 dbcreator 不授予您访问数据库的权限。看起来是这样,因为当您创建一个新数据库时,您(通常,除非另有说明)自动成为该数据库的所有者。数据库的所有者可以在该数据库中执行所有操作。
但是如果登录名具有 dbcreator 的服务器角色,他们仍然可以删除不属于他们的数据库。他们可以创建新数据库或更改现有数据库。
如果您的意图是纯粹让他们创建新数据库并仅管理这些数据库。您应该只给他们创建权限。
USE MASTER
GO
GRANT CREATE ANY DATABASE TO Foo
GO
这仍然允许他们对他们创建的数据库进行 运行 ALTER 语句(因为他们是所述数据库的所有者)。但不是 运行 改变(或删除)针对现有数据库的语句。
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