【发布时间】:2015-05-08 22:48:13
【问题描述】:
背景:
在设置SqlDependency 时,我使用了这些文章中的信息来为数据库用户提供所需的最低权限:
- Minimum Database Permissions Required for SqlDependency
- SqlDependency and SQL Service Broker Permissions
结果是这样的:
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 设置为用户拥有的 DEFAULT_SCHEMA,那么它可以工作(当然)。
问题:
- 为什么在使用角色拥有的架构时会出错?
- 如果我想避免为每个用户创建架构,有哪些选择?
可能有用的信息:
我使用的是 SQL Server 2012
我查看了this related question,但在架构上为用户提供
ALTER和/或CONTROL似乎不起作用。
【问题讨论】:
-
对于任何找到此 Q 的人,此 DBA Q 可能会有所帮助:dba.stackexchange.com/questions/47567/…
标签: c# sql-server sql-server-2012 sqldependency