[英]SQL Server using inner join on 2 databases with different SQL authentication credentials
这可能无法完成,但我想还是会问。
在我的SQL Server上,我有2个数据库,每个数据库都有不同的SQL身份验证凭据-每个数据库都由不同的程序使用不同的用户名和密码。
我想做的是一个内部联接查询,它链接2个表,每个数据库一个表。
如果只是Windows身份验证,则可以使用类似以下内容的方法:
SELECT a.userID,
b.usersFirstName,
b.usersLastName
FROM
TableA a
inner join
databaseB.dbo.TableB b
ON
a.userID=b.userID
但是作为其SQL身份验证,我看不到如何输入第二个数据库的凭据。
这用于已经创建到第一个数据库的连接的VB.Net程序中(因此,缺少的数据库和架构名称已经在连接字符串中进行了设置)
能做到吗?
编辑:
需要说明的是-它们都在同一台服务器上。 每个人都有不同的用户名和密码
VB.Net程序中的两个连接字符串如下所示:
Data Source=VIMES;Database=database1;User Id=username1; Password=password1
Data Source=VIMES;Database=database2;User Id=username2; Password=password2
我认为最好的显示方法是脚本。 这几乎可以自我解释,但是,如果您有任何疑问,请发表评论:
USE master;
GO
--Create sample Login
CREATE LOGIN SampleLogin WITH PASSWORD = 'ASD123!"£';
GO
--Create 2 test databases
CREATE DATABASE Sample1;
CREATE DATABASE Sample2;
GO
USE Sample1;
GO
--Create a user linked to the login in the first database
CREATE USER SampleUser FOR LOGIN SampleLogin;
GO
--Create a sample table
CREATE TABLE SampleTable (ID int);
INSERT INTO SampleTable
VALUES (1),(2),(3);
GO
--Grant permissions
GRANT SELECT ON SampleTable TO SampleUser;
GO
USE Sample2;
GO
--Create a table in the other database
CREATE TABLE SampleTable (ID int, fID int);
INSERT INTO SampleTable
VALUES (4,1),(5,2),(6,3);
GO
USE Sample1;
GO
--Change database context and execute as the sample login
EXECUTE AS LOGIN = 'SampleLogin';
GO
--This will fail. This is because SampleLogin doesn't have permission to access the database Sample2
SELECT *
FROM SampleTable ST1
JOIN Sample2.dbo.SampleTable ST2 ON ST1.ID = ST2.ID;
GO
REVERT;
GO
USE Sample2
GO
--Switch to Sample2 and create a User on the database for the Login and grant permissions.
CREATE USER SampleUser FOR LOGIN SampleLogin;
GRANT SELECT ON SampleTable TO SampleUser;
GO
USE Sample1;
GO
--Let's try it again.
EXECUTE AS LOGIN = 'SampleLogin';
GO
--Success! Beacuse the SQL Login has a user on both databases
SELECT *
FROM SampleTable ST1
JOIN Sample2.dbo.SampleTable ST2 ON ST1.ID = ST2.fID;
GO
REVERT;
GO
--Clean up
USE master;
DROP DATABASE Sample1;
DROP DATABASE Sample2;
DROP LOGIN SampleLogin;
GO
当前设置中的问题是您的登录名在您要连接的数据库上只有一个用户; 它没有第二个。 在第二个用户上创建它,它将起作用。 对于来自同一应用程序的单独数据库,您不需要2个不同的登录名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.