stored example .net sql-server-2008 active-directory sqlclr directoryservices

.net - example - Cómo registrar System.DirectoryServices para usar en SQL CLR User Functions?



sql clr example (4)

¿Ayuda esto: crear un ensamblado en SQL Server ?

Honestamente, no sé mucho sobre el uso de SQL Server CLR. Entonces, si esto ayuda, lo mantendré para aprenderme a mí mismo. =)

EDIT # 1

Aquí hay otro enlace interesante sobre el tema.

SQL Server 2005 CLR integración y montaje registrando problemas

¡Espero que esto ayude!

Voy a portar un antiguo componente 2-bit COM 3 y 2-bit COM que se escribió en VB6 con el fin de leer y escribir en un servidor de Active Directory . La nueva solución estará en C# y usará las funciones de usuario SQL CLR .

El ensamblado que intento implementar en SQL Server contiene una referencia a System.DirectoryServices . El proyecto se compila sin errores pero no puedo implementar el ensamblado en el SQL Server debido al siguiente error:

Error: Assembly ''system.directoryservices, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.'' was not found in the SQL catalog.

¿Cuáles son los pasos correctos para registrar System.DirectoryServices en SQL Server?


¿Ese artículo aquí ayuda?

Nuevo ensamblado "aprobado por SQLCLR" en SP1

La gente suele preguntar sobre el conjunto de conjuntos de bibliotecas de la clase base que se pueden usar de forma segura en SQLCLR. Por lo general toma la forma "¿Puedo usar el ensamblado System.XYZ.dll en el código de procedimiento SQLCLR" o "¿por qué obtengo" assembly System.XYZ.dll no se encuentra "cuando intento catalogar mi propio ensamblado que llama a este? Los que se mencionan con mayor frecuencia son System.DirectoryServices.dll (compatibilidad con Active Directory) o System.Management.dll (compatibilidad con WMI) o System.Remoting.dll y otros. La única manera de usarlos es ejecutar CREATE ASSEMBLY en ellos. usted mismo, lo que implica el uso de PERMISSION_SET = UNSAFE. Y la catalogación de todas las dependencias. No es para los débiles de corazón.

Además, SQL Server CLR no admite todos los ensamblajes imaginables, encuentre listas aquí:

Una nota de ese segundo artículo de MSDN:

Bibliotecas no compatibles

Las bibliotecas no admitidas aún se pueden llamar desde sus procedimientos almacenados administrados, activadores, funciones definidas por el usuario, tipos definidos por el usuario y agregados definidos por el usuario. La biblioteca no compatible debe registrarse primero en la base de datos de SQL Server, utilizando la instrucción CREATE ASSEMBLY, antes de que pueda usarse en su código. Cualquier biblioteca no admitida que esté registrada y se ejecute en el servidor debe revisarse y probarse para garantizar su seguridad y confiabilidad.

Por ejemplo, el espacio de nombres System.DirectoryServices no es compatible . Debe registrar el ensamblado System.DirectoryServices.dll con permisos UNSAFE antes de poder llamarlo desde su código. El permiso SEGURO es necesario porque las clases en el espacio de nombres System.DirectoryServices no cumplen los requisitos para SAFE o EXTERNAL_ACCESS. Para obtener más información, vea CLR Integration Programming Model Restrictions y CLR Integration Code Code Security.


La información proporcionada a partir de otras respuestas me llevó a la solución. Estos son los pasos que surgieron para futuras referencias:

CREATE ASSEMBLY [System.DirectoryServices] FROM ''C:/Windows/Microsoft.NET/Framework/v2.0.50727/System.DirectoryServices.dll'' WITH PERMISSION_SET = UNSAFE GO

La primera vez que ejecuté la declaración anterior recibí el siguiente error:

CREATE ASSEMBLY para el ensamblado ''System.DirectoryServices'' falló porque el ensamblado ''System.DirectoryServices'' no está autorizado para PERMISSION_SET = UNSAFE. El ensamblado está autorizado cuando cualquiera de los siguientes es verdadero: el propietario de la base de datos (DBO) tiene permiso de ASEGURAMIENTO NO SEGURO y la base de datos tiene la propiedad de base de datos TRUSTWORTHY activada; o el ensamble está firmado con un certificado o una clave asimétrica que tiene un inicio de sesión correspondiente con el permiso ASAMBLEA NO SEGURA.

Para que la sentencia CREATE ASSEMBLY se ejecute sin error, primero tuve que activar TRUSTWORTHY de la siguiente manera:

ALTER DATABASE DatabaseName SET TRUSTWORTHY ON GO

Una vez que TRUSTWORTHY está activado, el comando se ejecutó sin error pero presentó esta advertencia de sonido aterrador:

Advertencia: El ensamblado de Microsoft .NET Framework ''system.directoryservices, version = 2.0.0.0, culture = neutral, publickeytoken = b03f5f7f11d50a3a, processorarchitecture = msil.'' que está registrando no se ha probado completamente en el entorno alojado de SQL Server y no es compatible. En el futuro, si actualiza o repara este ensamblaje o .NET Framework, su rutina de integración de CLR puede dejar de funcionar. Consulte los Libros en pantalla de SQL Server en línea para obtener más detalles.

Con System.DirectoryServices debidamente registrado en SQL Server, ahora puedo desplegar / registrar el ensamblado SQL CLR personalizado dependiente sin ningún problema.


Me gustaría añadir que, pasé un día tratando de registrar un ensamblado utilizando una DLL de clave asimétrica que falla con el error.

. . . no está autorizado para PERMISSION_SET = UNSAFE. El montaje está autorizado cuando. . .

CREATE ASYMMETRIC KEY AsyKeyName FROM executable FILE = ''C:/Program Files/...''

Más tarde solo para descubrir que al servidor SQL no le gustan las rutas con espacios intermedios.