gpt4 book ai didi

c# - SqlDependency、最小数据库权限和角色拥有的模式

转载 作者:太空宇宙 更新时间:2023-11-03 15:41:29 29 4
gpt4 key购买 nike

背景:

在设置 SqlDependency 时,我使用了这些文章中的信息来为数据库用户提供所需的最低权限:

最后是这样的:

CREATE ROLE [sql_dependency_user] AUTHORIZATION [dbo];
GRANT REFERENCES ON CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] TO [sql_dependency_user];

-- for Start()
GRANT CREATE PROCEDURE to [sql_dependency_user];
GRANT CREATE QUEUE to [sql_dependency_user];
GRANT CREATE SERVICE to [sql_dependency_user];
GRANT VIEW DEFINITION TO [sql_dependency_user];

-- for subscribe
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [sql_dependency_user];
GRANT RECEIVE ON QueryNotificationErrorsQueue TO [sql_dependency_user];

问题:

如果我创建一个由该角色拥有的架构,并将用户添加到该角色(如上面的 keithelder link):

CREATE SCHEMA [sql_dependency] AUTHORIZATION [sql_dependency_user]
ALTER USER [user_name] WITH DEFAULT_SCHEMA = [sql_dependency]

SqlDependency.Start() 抛出错误:

Cannot find the specified user 'owner'.
Cannot find the queue 'SqlQueryNotificationService-00000000-0000-0000-0000-000000000000', because it does not exist or you do not have permission.
Invalid object name 'SqlQueryNotificationService-00000000-0000-0000-0000-000000000000'.

但是,如果我将用户的 DEFAULT_SCHEMA 设置为用户拥有的一个,那么它就可以工作(当然)。

问题:

  1. 为什么在使用角色拥有的模式时会出现错误?
  2. 如果我想避免为每个用户创建模式,有哪些选择?

可能有用的信息:

  • 我使用的是 SQL Server 2012

  • 我看过 this related question ,但在架构上向用户提供 ALTER 和/或 CONTROL 似乎不起作用。

最佳答案

回答你的问题:1)

您需要将所有者分配给您的架构。运行以下查询,它应该可以解决您的问题:

ALTER AUTHORIZATION ON DATABASE::MyDatabaseName TO NewOwner;
GO

在你的情况下:

ALTER AUTHORIZATION ON SCHEMA::[sql_dependency] TO [sql_dependency_user];

关于c# - SqlDependency、最小数据库权限和角色拥有的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30133952/

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