gpt4 book ai didi

database - 在数据库中启用快照隔离需要哪些用户权限?

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:47 25 4
gpt4 key购买 nike

我有一个用户对数据库具有 db_datareader、db_datawriter 权限。我想将隔离级别设置为用户有权访问的数据库。我的用户需要什么权限才能设置这些。使用的数据库:SQL SERVER 2008

最佳答案

这不是设置隔离级别:

ALTER DATABASE dbname SET ALLOW_SNAPSHOT_ISOLATION ON;

那是改变数据库。为此,您需要向他们提供对数据库的 ALTER 权限:

GRANT ALTER ON DATABASE::dbname TO username;

否则你会得到这个错误:

Msg 5011, Level 14, State 9, Line 1
User does not have permission to alter database 'dbname', the database does not exist, or the database is not in a state that allows access checks.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.

现在,ALTER 是全有或全无 - 你不能用它来允许他们更改允许快照设置但不能更改其他设置,如强制参数化、兼容级别等。你可以这样做不过,更细化;或许您可以创建一个存储过程来执行如下操作:

CREATE PROCEDURE dbo.SetIsolationLevel
WITH EXECUTE AS OWNER
AS
BEGIN
SET NOCOUNT ON;

DECLARE @sql NVARCHAR(MAX) = N'ALTER DATABASE '
+ QUOTENAME(DB_NAME())
+ ' SET ALLOW_SNAPSHOT_ISOLATION ON;';

EXEC sp_executesql @sql;
END
GO

现在您只需授予用户对该过程的 EXEC 权限,您的用户现在可以调用该过程(而不是显式地使用 ALTER DATABASE 命令,而不是给他们完整的 ALTER DATABASE 权限):

GRANT EXEC ON dbo.SetIsolationLevel TO username;
GO

您可以通过以他们的身份登录或直接使用 EXECUTE AS 功能来模拟他们调用此存储过程:

EXECUTE AS USER = 'username';
GO
EXEC dbo.SetIsolationLevel;
GO
REVERT;
GO

另一个想法是简单地将 model 数据库设置为具有此设置,而不是为您的用户创建的任何新数据库将自动继承它,然后您不必担心创建它们打开它。

ALTER DATABASE model SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
CREATE DATABASE splunge;
GO
SELECT snapshot_isolation_state_desc FROM sys.databases WHERE name = N'splunge';

结果:

ON

关于database - 在数据库中启用快照隔离需要哪些用户权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18645930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com