2012-01-30 12 views
6

Próbuję wykonać add an assembly do bazy danych w SQL2008 przy użyciu asymmetric key.asymetryczne tworzenie klucza za pośrednictwem sieci

Dodajemy montaż przy użyciu ciąg szesnastkowy (dodawanie zestawów do serwerów przez tylko zapytań 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 

To będzie działać na lokalnej instancji jednak przez sieć otrzymujemy; The certificate, asymmetric key, or private key file does not exist or has invalid format.

I mogą być błędnie zakładając, że należy najpierw dodać klucz, powinienem być dodanie zespół potem robić coś wzdłuż linii CREATE ASYMMETRIC KEY ManagedAsymmetricKey FROM ASSEMBLY [workingDB].[dbo].[Managed]?

Odpowiedz

2

FROM FILE = jest zawsze z perspektywy SQL Server. Użytkownik skopiowałby certyfikat na dysk lokalny na serwerze bazy danych.

5

Można stosować następujące kroki, aby dostać pracy:

  • uruchomić CREATE montaż z BEZPIECZNEGO permission_set (nawet jeśli zespół potrzebuje niebezpieczne dla realizacji)
  • utworzyć klucz asymetryczny z zespołu
  • upuścić montaż
  • utworzyć login z asymetrycznego klucz
  • udzielić login niebezpieczne prawa montażowych

    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

Do tymczasowego montażu, nie trzeba ustawić '' UNSAFE' PERMISSION_SET' się, ponieważ nie trzeba wykonywać kod z zespołu, aby utworzyć klucz. Oznacza to również, że nie musisz ustawiać "TRUSTWORTHY" w dowolnym miejscu. Poza tym, dzięki za sprytny hack! –

+0

Stawiam niebezpieczne, ponieważ montaż w pytaniu jest niebezpieczny. jeśli masz bezpieczny montaż, to naprawdę nie jest potrzebne. –

+0

Nie jestem w 100% na tym, ale nie sądzę, że zgromadzenia są z natury (nie) bezpieczne. Mój zestaw zawiera kod, który działa tylko z uprawnieniami "UNSAFE", ale SQL Server nie narzeka, gdy utworzę zestaw z 'PERMISSION_SET = SAFE'. –

Powiązane problemy