in

UGISS Community

Il sito della community dello User Group Italiano di SQL Server

SQL CLR - Permission assembly

Last post 09-11-2007 10.23 by dmauri. 1 replies.
Page 1 of 1 (2 items)
Sort Posts: Previous Next
  • 09-11-2007 9.44

    • merics
    • Top 200 Contributor
    • Joined on 08-07-2007
    • Posts 1
    • Points 20

    SQL CLR - Permission assembly

    Ho creato una function dentro un assembly CLR che richiamo da una sp.

    Questa function crea un file di testo (che poi viene rinominato in xml perchè non è un vero xml, ho a che fare con gli IDOC dei signori SAP...lasciamo perdere) e poi lancia un bat che contiene i parametri per copiare via ftp questo file sul server del cliente.

    Fino alla creazione del file tutto ok, aggiunta la parte del lancio bat ricevo l'errore di seguito. Il tutto viene lanciato su un win server 2003 in un dominio di rete normalissimo e secondo il mio parere non sono state settate policy di sicurezza particolari perchè qua parliamo di spagnoli...che non hanno nemmeno voglia di sapere cosa sia una password.

    L'assembly ha uno strong name, sta nella GAC e l'ho registrato in sql 2005 dandogli permission "external_access", e infatti con le operazione di IO tutto ok, poi il lancio del bat sembra averlo sconvolto...la cartella dove risiedono i file e i file stessi hanno Everyone-FullControl e utente administrator-FullControl. Qua si fermano le mie conoscenze sistemistiche. Tra l'altro ho lo stesso problema sul mio pc, che è configurato per lo sviluppo quindi non è un server. Ho cercato e ricercato on-line di capire cosa sbagliavo nelle permission dell'assembly, ho anche provato con i Net Framework 2.0 Configuration Tool di creare un nuovo gruppo di permission con un nuovo set di autorizzazioni, ma sinceramente gli assembly con lo strong name hanno già la FullTrust di default quindi...mi fermo qua.

    Qualcuno sa aiutarmi?

    Grazie

    Marica

     

    Messaggio 6522, livello 16, stato 1, procedura fn_Carrion_ScriviXml, riga 0
    Errore di .NET Framework durante l'esecuzione dell'aggregazione o routine definita dall'utente "fn_Carrion_ScriviXml":
    System.Security.SecurityException: Request failed.
    System.Security.SecurityException:
       at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed)
       at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Object assemblyOrString, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed)
       at System.Security.CodeAccessSecurityEngine.CheckSetHelper(PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandle rmh, Object assemblyOrString, SecurityAction action, Boolean throwException)
       at System.Security.CodeAccessSecurityEngine.CheckSetHelper(CompressedStack cs, PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandle rmh, Assembly asm, SecurityAction action)
       at UserDefinedFunctions.f_ScriviXml(SqlXml DataToWrite, SqlString PathXml, SqlString PathFtp, SqlString PathBat)
    .

    • Post Points: 20
  • 09-11-2007 10.23 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.079
    • Points 14.210

    Re: SQL CLR - Permission assembly

    Che codice hai utilizzato per l'esecuzione del file .bat?

    Ad occhio e croce direi che per lanciare il file batch usi un assembly che però SQL Server non permette l'utilizzo in quanto probabilmente necessita di privilegi più alti di quelli forniti dall'opzione "external_access".

    Molto probabilmente utilizzando l'opzione "unsafe" al posto che "external_access" tutto funzionerà....e credo che per lanciare un'eseguibile dall'interno di una stored procedure .NET  non sia possibile percorrere altre strade, se non quella della creazione di un sistema asincrono....utilizzando un servizio esterno da creare ad-hoc per questo tipo di necessità.

    Posso supporre, infatti, che il codice che utilizzi per lanciare un batch necessiti della permssion "ExternalProcessMgmt", che è però negata dal permission set associato alle opzioni SAFE ed EXTERNAL_ACCESS:

    http://msdn2.microsoft.com/en-us/library/ms403273.aspx
     

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 5
Page 1 of 1 (2 items)
(C) 2007 User Group Italiano di SQL Server