Sql server 2008 使用来自其他数据库的SQL证书

Sql server 2008 使用来自其他数据库的SQL证书,sql-server-2008,encryption,certificate,Sql Server 2008,Encryption,Certificate,我有一个数据库A在这个数据库中有一个证书和一个表。我想在数据库a中的表中插入加密值。存储过程位于数据库B中,理想情况下会进行如下调用: EncryptByCert(Cert_ID('CertifiacteName'), 'SecretData') CREATE FUNCTION dbo.MyEncrypt(@Data VARCHAR(4000)) RETURNS TABLE AS RETURN SELECT ENCRYPTBYCERT(CERT_ID('MyCert'),@Data) Encr

我有一个数据库
A
在这个数据库中有一个证书和一个表。我想在数据库
a
中的表中插入加密值。存储过程位于数据库
B
中,理想情况下会进行如下调用:

EncryptByCert(Cert_ID('CertifiacteName'), 'SecretData')
CREATE FUNCTION dbo.MyEncrypt(@Data VARCHAR(4000))
RETURNS TABLE
AS
RETURN
SELECT ENCRYPTBYCERT(CERT_ID('MyCert'),@Data) EncryptedData;
INSERT INTO DatabaseA.dbo.MyTable(id,EncryptedData)
VALUES(42, (SELECT EncryptedData FROM DatabaseA.dbo.MyEncrypt('testvalue')) );
这将始终失败,因为数据库
B
无法在数据库
A


在不移动存储过程或证书的情况下,如何使用数据库
a
中的证书在数据库
B
中创建加密值?

您可以将EncryptByCert调用封装在数据库a中的函数中,如下所示:

EncryptByCert(Cert_ID('CertifiacteName'), 'SecretData')
CREATE FUNCTION dbo.MyEncrypt(@Data VARCHAR(4000))
RETURNS TABLE
AS
RETURN
SELECT ENCRYPTBYCERT(CERT_ID('MyCert'),@Data) EncryptedData;
INSERT INTO DatabaseA.dbo.MyTable(id,EncryptedData)
VALUES(42, (SELECT EncryptedData FROM DatabaseA.dbo.MyEncrypt('testvalue')) );
要在连接到数据库B时将数据插入数据库A中的表中,请使用以下方法:

EncryptByCert(Cert_ID('CertifiacteName'), 'SecretData')
CREATE FUNCTION dbo.MyEncrypt(@Data VARCHAR(4000))
RETURNS TABLE
AS
RETURN
SELECT ENCRYPTBYCERT(CERT_ID('MyCert'),@Data) EncryptedData;
INSERT INTO DatabaseA.dbo.MyTable(id,EncryptedData)
VALUES(42, (SELECT EncryptedData FROM DatabaseA.dbo.MyEncrypt('testvalue')) );