【问题标题】:The server principal Xuser is not able to access the database Ydb under the current security context. sql server 2008服务器主体 Xuser 在当前安全上下文下无法访问数据库 Ydb。 sql server 2008
【发布时间】:2012-07-21 02:01:41
【问题描述】:

我试图弄清楚为什么我的存储过程无法从另一个数据库的列中进行选择。

数据库 Kdb 和 Ydb 具有相同的数据库所有者。使用该数据库所有者帐户创建的两个数据库中的存储过程和表。

Ydb 中有一个存储过程试图访问由最低权限用户执行的 Kdb 中的表(只有在 Ydb 上执行和连接,对 Kdb 没有权限)。

Use [Ydb]
GO
ALTER PROCEDURE  [dbo].[CreateSecureTableAEntry]
@fid int
AS
BEGIN
DECLARE @operatorId uniqueidentifier
DECLARE @orgName nvarchar(max)
SELECT @orgName = SUBSTRING(SYSTEM_USER,1,LEN(SYSTEM_USER)-4)
SELECT @operatorId = Id FROM Kdb.dbo.Organizations WHERE Kdb.dbo.Organizations.Name =  @orgName
INSERT INTO TableA (operatorId, sourceFid) VALUES (@operatorId, @fid);
END

我在 Kdb 和 Ydb 上都启用了跨数据库链接。我让 Ydb 值得信赖。

这显然是权限问题,但在保持权限尽可能严格的情况下,我还应该怎么做呢?

【问题讨论】:

    标签: sql sql-server-2008 security


    【解决方案1】:

    我通过将选择查询合并到 Ydb 内的视图中并使用以下查询在 Kdb 上启用来宾帐户成功地解决了这个问题:

    USE [Kdb];
    GO
    GRANT CONNECT TO guest;
    

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      相关资源
      最近更新 更多