Creación de un ensamblado
Se aplica a:SQL Server
Los objetos de base de datos administrados, como procedimientos almacenados o desencadenadores, se compilan y, a continuación, se implementan en unidades denominadas ensamblados. Los ensamblados DLL administrados deben registrarse en SQL Server para poder usar la funcionalidad que proporciona el ensamblado. Para registrar un ensamblado en una base de datos de SQL Server, use la instrucción CREATE ASSEMBLY
. En este artículo se describe cómo registrar un ensamblado en una base de datos mediante la instrucción CREATE ASSEMBLY
y cómo especificar la configuración de seguridad para el ensamblado.
Instrucción CREATE ASSEMBLY
La instrucción CREATE ASSEMBLY
se usa para crear un ensamblado en una base de datos. Este es un ejemplo:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
La cláusula FROM
especifica el nombre de ruta de acceso del ensamblado que se va a crear. Esta ruta de acceso puede ser una ruta de acceso UNC (Convención de nomenclatura universal) o una ruta de acceso al archivo físico local en el equipo.
SQL Server no permite registrar versiones diferentes de un ensamblado con el mismo nombre, referencia cultural y clave pública.
Es posible crear ensamblados que hagan referencia a otros ensamblados. Cuando se crea un ensamblado en SQL Server, SQL Server también crea los ensamblados a los que hace referencia el ensamblado de nivel raíz, si los ensamblados a los que se hace referencia aún no se crean en la base de datos.
A los usuarios de base de datos o a los roles de usuario se les conceden permisos para crear y, por tanto, los ensamblados de una base de datos. Para crear ensamblados, el usuario o el rol de la base de datos deben tener el permiso CREATE ASSEMBLY
.
Un ensamblado solo puede hacer referencia correctamente a otros ensamblados si:
- El ensamblado al que se llama o hace referencia es propiedad del mismo usuario o rol.
- El ensamblado al que se llama o hace referencia se creó en la misma base de datos.
Especificar la seguridad al crear ensamblados
Al crear un ensamblado en una base de datos de SQL Server, puede especificar uno de los tres niveles de seguridad diferentes en los que se puede ejecutar el código: SAFE
, EXTERNAL_ACCESS
o UNSAFE
. Cuando se ejecuta la instrucción CREATE ASSEMBLY
, se realizan ciertas comprobaciones en el ensamblado de código, lo que podría provocar que el ensamblado no se registre en el servidor.
SAFE
es el conjunto de permisos predeterminado y funciona para la mayoría de los escenarios. Para especificar un nivel de seguridad determinado, modifique la sintaxis de la instrucción CREATE ASSEMBLY
de la siguiente manera:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = SAFE;
También es posible crear un ensamblado con el conjunto de permisos SAFE
omitiendo la tercera línea de anterior.
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Cuando el código de un ensamblado se ejecuta en el conjunto de permisos SAFE
, solo puede realizar el cálculo y el acceso a datos dentro del servidor a través del proveedor administrado en proceso.
Creación de ensamblados EXTERNAL_ACCESS y UNSAFE
EXTERNAL_ACCESS
aborda escenarios en los que el código necesita acceder a los recursos fuera del servidor, como archivos, red, registro y variables de entorno. Cuando el servidor obtiene acceso a un recurso externo, suplanta el contexto de seguridad del usuario que llama al código administrado.
UNSAFE
permiso de código es para aquellas situaciones en las que un ensamblado no es seguro verificable o requiere acceso adicional a recursos restringidos, como la API de Win32.
Para crear un ensamblado EXTERNAL_ACCESS
o UNSAFE
en SQL Server, se debe cumplir una de las dos condiciones siguientes:
El ensamblado está firmado con un nombre seguro o firmado mediante Authenticode con un certificado. Este nombre seguro (o certificado) se crea dentro de SQL Server como una clave asimétrica (o certificado) y tiene un inicio de sesión correspondiente con
EXTERNAL ACCESS ASSEMBLY
permiso (para ensamblados de acceso externo) oUNSAFE ASSEMBLY
permiso (para ensamblados no seguros).El propietario de la base de datos (DBO) tiene
EXTERNAL ACCESS ASSEMBLY
(para ensambladosEXTERNAL ACCESS
) oUNSAFE ASSEMBLY
(para ensambladosUNSAFE
) y la base de datos tiene la propiedad de base de datos TRUSTWORTHY establecida enON
.
Las dos condiciones enumeradas anteriormente también se comprueban en tiempo de carga del ensamblado (lo que incluye la ejecución). Para cargar el ensamblado debe cumplirse al menos una de las condiciones.
Se recomienda que la propiedad de base de datos TRUSTWORTHY en una base de datos no esté establecida en ON
solo para ejecutar código de Common Language Runtime (CLR) en el proceso del servidor. En su lugar, se recomienda crear una clave asimétrica a partir del archivo de ensamblado de la base de datos de master
. Se debe crear un inicio de sesión asignado a esta clave asimétrica y se debe conceder el inicio de sesión EXTERNAL ACCESS ASSEMBLY
o UNSAFE ASSEMBLY
permiso.
Las siguientes instrucciones Transact-SQL realizan los pasos necesarios para crear una clave asimétrica, asignar un inicio de sesión a esta clave y, a continuación, conceder permiso EXTERNAL_ACCESS
al inicio de sesión. Debe ejecutar las siguientes instrucciones Transact-SQL antes de ejecutar la instrucción CREATE ASSEMBLY
.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey
FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin
FROM ASYMMETRIC KEY SQLCLRTestKey;
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
GO
Nota:
Debe crear un nuevo inicio de sesión para asociarlo a la clave asimétrica. Este inicio de sesión solo se usa para conceder permisos. No tiene que estar asociado a un usuario ni usarse dentro de la aplicación.
Para crear un ensamblado EXTERNAL ACCESS
, el creador debe especificar EXTERNAL ACCESS
permiso al crear el ensamblado:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
Las siguientes instrucciones Transact-SQL realizan los pasos necesarios para crear una clave asimétrica, asignar un inicio de sesión a esta clave y, a continuación, conceder permiso UNSAFE
al inicio de sesión. Debe ejecutar las siguientes instrucciones Transact-SQL antes de ejecutar la instrucción CREATE ASSEMBLY
.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey
FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin
FROM ASYMMETRIC KEY SQLCLRTestKey;
GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin;
GO
Para especificar que un ensamblado se carga con UNSAFE
permiso, especifique el conjunto de permisos UNSAFE
al cargar el ensamblado en el servidor:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = UNSAFE;
Para obtener más información sobre los permisos de cada una de las opciones de configuración, consulte seguridad de integración de CLR.
Contenido relacionado
- Administrar ensamblados de integración clR
- Modificar un ensamblado
- Quitar un ensamblado
- de seguridad de acceso al código de integración clR
- propiedad de base de datos TRUSTWORTHY