SqlDependency,最小数据库权限和角色拥有的模式

时间:2015-05-08 22:48:13

标签: c# sql-server sql-server-2012 sqldependency

背景:

设置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()会抛出错误:

  

无法找到指定的用户'   找不到队列' SqlQueryNotificationService-00000000-0000-0000-0000-000000000000',因为它不存在或您没有权限。
  无效的对象名称' SqlQueryNotificationService-00000000-0000-0000-0000-000000000000'。

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

的问题:

  1. 使用角色拥有的架构时为什么会出错?
  2. 如果我想避免为每个用户创建架构,有哪些选项?
  3. 可能有用的信息:

    • 我正在使用SQL Server 2012

    • 我已经查看了this related question,但似乎在模式上向用户提供ALTER和/或CONTROL似乎无法正常工作

1 个答案:

答案 0 :(得分:0)

回答你的问题:1) 我有同样的问题。 如果有人仍然面临问题。请遵循以下解决方案:

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

ALTER AUTHORIZATION ON DATABASE::MyDatabaseName TO NewOwner;
GO

在你的情况下:

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