POR FAVOR, haga no Agregue un inicio de sesión a la sysadmin
Función de servidor fijo para poder pasar este error. ¡No es absolutamente necesario!
La respuesta aceptada es incorrecta, no porque no funcione (lo hace), sino porque no hay necesidad de otorgar CONTROL TOTAL EN TODA LA INSTANCIA a un inicio de sesión solo para hacer algo que tiene un permiso específico para . Usted no haría que un Inicio de sesión de Windows sea un Administrador de dominio únicamente con el fin de otorgarle permiso de Eliminar en un recurso compartido o carpeta en particular.
Para que quede claro, esto no es culpa del póster, ya que citaban correctamente la documentación de MSDN. El problema es que la documentación de MSDN para CREATE ASSEMBLY
era incorrecta. El documentation for SQL Server 2008 R2 hizo, lamentablemente, indicar que el inicio de sesión tenía que estar en el rol de servidor sysadmin
. Sin embargo, it has since been corrected a estado:
If PERMISSION_SET = UNSAFE is specified, requires UNSAFE ASSEMBLY permission on the server.
Este permiso, UNSAFE ASSEMBLY
, es el permiso exacto indicado en el mensaje de error:
UNSAFE ASSEMBLY permission was denied on object 'server', database 'master'
Significado, todo lo que se necesita es hacer lo siguiente (una vez) :
USE [master];
GRANT UNSAFE ASSEMBLY TO [AD_domain_name\windows_login_name]; -- for Windows Logins
o:
USE [master];
GRANT UNSAFE ASSEMBLY TO [sql_login_name]; -- for SQL Server Logins
La razón por la que necesita estar en la base de datos [master]
es que este permiso es un nivel de servidor, no de nivel de base de datos, que debe aplicarse a los inicios de sesión (que existen en el nivel del servidor) y no a los usuarios (que existen en el nivel de la base de datos).
Y es por esto que el mensaje de error hace referencia a object 'server'
(porque se trata de un permiso de nivel de servidor) y database 'master'
(porque inicios de sesión existen en la base de datos [master]
y sólo se pueden modificar cuando la base de datos actual para la consulta se establece en [master]
) .
He probado esto con un inicio de sesión que obtendría el mensaje de error que se muestra en la Pregunta (es decir, Msg 300
) al intentar cargar un Ensamblaje marcado como WITH PERMISSION_SET = UNSAFE
. Luego concedí ese permiso UNSAFE ASSEMBLY
y el inicio de sesión pudo cargar el ensamblaje UNSAFE
; no se requirió la membresía sysadmin
(o incluso se intentó). Probé esto en: SQL Server 2005 SP4, SQL Server 2008 R2 RTM y SQL Server 2012 SP3.
Esto indicaría que está agregando el ensamblado a la base de datos 'master'. ¿Es esto correcto? –
¿El inicio de sesión utiliza un miembro del rol 'sysadmin'? – a1ex07
@Neil Knight: Ese es el problema, no sé por qué dice "base de datos maestra". Tengo 'USE [mydatabase]' porque estoy tratando de insertar el ensamblado en 'mydatabase' – MStodd