2012-01-30 36 views
6

Tôi đang cố gắng add an assembly vào cơ sở dữ liệu trong SQL2008 bằng cách sử dụng asymmetric key.tạo khóa không đối xứng qua mạng

Chúng tôi đang thêm lắp ráp bằng cách sử dụng một chuỗi hex (thêm cụm máy chủ thông qua chỉ truy vấn sql)

USE [master] 
GO 

IF NOT EXISTS (SELECT * from sys.asymmetric_keys where name = 'ManagedAsymmetricKey') 
BEGIN 
    CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM FILE = 'C:\Managed.dll' 
    CREATE LOGIN CLRLogin FROM ASYMMETRIC KEY ManagedAsymmetricKey 
    GRANT UNSAFE ASSEMBLY TO CLRLogin 
END 
GO 

USE [$dbName] 
GO 
CREATE ASSEMBLY [Managed] 
AUTHORIZATION [dbo] 
FROM 0x4D5A.... 
WITH PERMISSION_SET = UNSAFE 
GO 

này sẽ làm việc trên một trường hợp địa phương tuy nhiên qua mạng chúng tôi nhận được; The certificate, asymmetric key, or private key file does not exist or has invalid format.

Tôi có thể giả định sai rằng tôi nên thêm khóa trước, tôi có nên thêm bản lắp ráp sau đó thực hiện điều gì đó dọc theo các dòng CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM ASSEMBLY [workingDB].[dbo].[Managed] không?

Trả lời

2

FROM FILE = luôn là quan điểm của SQL Server. Bạn sẽ phải sao chép chứng chỉ vào một ổ đĩa cục bộ trên máy chủ cơ sở dữ liệu.

5

Bạn có thể sử dụng các bước sau đây để có được nó làm việc:

  • chạy tuyên bố lắp ráp tạo của bạn với permission_set SAFE (ngay cả khi lắp ráp cần gây mất an toàn để thực hiện)
  • tạo khóa đối xứng từ lắp ráp
  • thả lắp ráp của bạn
  • tạo ra một đăng nhập từ bất đối xứng chính
  • cấp quyền lắp ráp đăng nhập không an toàn

    CREATE ASSEMBLY [Managed] 
    AUTHORIZATION [dbo] 
    FROM 0x4D5A.... 
    WITH PERMISSION_SET = SAFE 
    
    CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM ASSEMBLY [Managed] 
    
    DROP ASSEMBLY [Managed] 
    
    CREATE LOGIN CLRLogin FROM ASYMMETRIC KEY ManagedAsymmetricKey 
    
    GRANT UNSAFE ASSEMBLY TO CLRLogin 
    
+1

Đối với lắp ráp tạm thời, bạn không cần phải thiết lập 'PERMISSION_SET' cho 'UNSAFE', bởi vì bạn không cần phải thực thi mã từ lắp ráp để tạo ra chìa khóa. Điều đó cũng có nghĩa là bạn không phải đặt 'TRUSTWORTHY' ở bất kỳ đâu. Bên cạnh đó, cảm ơn cho các thông minh hack! –

+0

Tôi đặt không an toàn vì việc lắp ráp trong câu hỏi là không an toàn. nếu bạn có một hội đồng an toàn thì điều này thực sự không cần thiết. –

+0

Tôi không phải là 100% về điều này, nhưng tôi không nghĩ rằng hội đồng là vốn (un) an toàn. Assembly của tôi chứa mã chỉ chạy với quyền 'UNSAFE', nhưng SQL Server không phàn nàn khi tôi tạo assembly với' PERMISSION_SET = SAFE'. –

Các vấn đề liên quan