【问题标题】:SqlDependency, minimum database permissions, and role-owned schemasSqlDependency、最低数据库权限和角色拥有的架构
【发布时间】:2015-05-08 22:48:13
【问题描述】:

背景:

在设置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 设置为用户拥有的 DEFAULT_SCHEMA,那么它可以工作(当然)。

问题:

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

可能有用的信息:

  • 我使用的是 SQL Server 2012

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

【问题讨论】:

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


【解决方案1】:

回答你的问题:1)

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

ALTER AUTHORIZATION ON DATABASE::MyDatabaseName TO NewOwner;
GO

在你的情况下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2011-11-27
    相关资源
    最近更新 更多