如何在sql server 2008中授予登录权限?

时间:2014-05-08 07:32:40

标签: sql sql-server database sql-server-2008 permissions

我有两个数据库。

数据库:

 1. DB1
 2. DB2

我创建了两个新登录。

登录

1. DB1_login
2. DB2_login

接下来,我为映射到上述登录的每个数据库创建了用户。

create user DB1_login1_user1 for login DB1_login;
create user DB2_login2_user2 for login DB2_login;

因此,DB1数据库的DB1_login1_user1用户将被映射到DB1_login1登录,DB2数据库的DB2_login2_user2用户将被映射到DB2_login2登录。

两个用户的授权数据库角色权限为 db_datareader db_datawriter

DB2 中,我有一个名为 dbo.sample_table 的表。

我的要求:

我们假设我已登录为DB1_login1。

在此登录中,我已将DB1_login1_user1用户的权限授予DB1数据库。

现在来自DB1,我必须在DB2中选择一个表 dbo.sample_table ,该表已映射到另一个登录DB2_login2。

以下是查询我要做的是。

--CURRENTLY LOGGED IN AS DB1_LOGIN1
USE DB1; 
EXECUTE as login='DB2_login2'
select * from DB2.dbo.sample_table
GO

我在LOGIN :: DB2_login2上尝试了GRANT IMPERSONATE到DB1_login1,但它没有用,而且,我不知道跨登录授予权限。我认为授予权限很重要,我需要帮助。

如何成功执行上述查询?

任何帮助都会很明显。

2 个答案:

答案 0 :(得分:1)

您创建的用户仅存在于各自的数据库中,因此您无法尝试执行此操作。即使它是,或者你允许在两个数据库中访问(创建用户登录)并给予权限并启用跨数据库访问,这将是一个太大的安全风险。

我建议使用存储过程访问数据交叉数据库。应使用证书对存储过程进行签名,并在两个数据库中创建相同的证书。我已经在各种场合实现了它并且它完美无缺。

Erland Sommarskog here有一个很好的例子。

答案 1 :(得分:0)

我确实授予了登录权限。

从管理员登录" Sa" ,我执行了以下查询。

GRANT IMPERSONATE ON LOGIN::DB2_login to DB1_login;

然后从DB1_login执行以下查询以跨登录访问数据库。

USE MASTER;
EXECUTE as login='DB2_login';
SELECT * FROM DB2.dbo.sample_table;
REVERT;
GO

最后,就我的情况而言,我已经解决了这个问题。