Determine las diferencias de seguridad entre dos usuarios de base de datos de servidores SQL

sqlbulkcopy sql-server sql-server-2012 ssms tsql

Pregunta

Estamos ejecutando SQL Server 2012 / .Net Framework 4.5.1

Tenemos una aplicación que hace lo siguiente:

  1. Extraiga todos los datos de la tabla de una base de datos de origen utilizando una instancia de .Net's SqlBulkCopy .
  2. Elimine todos los datos en una base de datos de destino utilizando instrucciones SQL regulares.
  3. Implemente los datos de la base de datos de origen a la base de datos de destino utilizando una instancia de .Net's SqlBulkCopy.

El tercer paso es exitoso cuando la conexión SQL usa mi cuenta de Active Directory, pero falla con el siguiente mensaje de error cuando se usa una cuenta de SQL Server creada para este propósito: No se puede encontrar el objeto "[SchemaName]. [TableName]" porque no Existes o no tienes permisos.

Curiosamente, el proceso se ejecuta a través de una docena de tablas antes de golpear una que causa este error. La verificación manual prueba que a) La tabla existe en el destino, b) El usuario con problemas puede seleccionar de la tabla yc) El usuario con problemas puede insertar manualmente en la tabla con el estándar INSERT INTO [SchemaName]. [TableName] ([ Columnas]) VALORES ([Valores]) formato. BCP también funciona para ese usuario, pero el uso de SqlBulkCopy desde una aplicación .Net falla para el mismo usuario.

Nuestro DBA (un tipo bastante experimentado, por lo que puedo decir) dice que los permisos de la base de datos en la base de datos objetivo son IDÉNTICOS entre los dos usuarios, pero la realidad parece sugerir que este no es el caso.

El problema de Google muestra que el usuario debe tener los roles db_owner o db_ddladmin. El usuario realmente pertenece a ambos.

De todos modos, resolver el problema local es una preocupación secundaria, ya que puedo hacer lo que necesito con mi cuenta de AD. Lo que realmente me gustaría saber es si existe una forma horneada de comparar las diferencias en los permisos entre dos usuarios. Si no, ¿se puede hacer con una consulta T-SQL de algún tipo?

Gracias, chicos y chicas!

Respuesta popular

Aquí está mi script de permisos que utilizo. Generalmente es el enfoque que todos usan, a menos que tengan un producto de comparación de esquemas a través de Visual Studio, Red Gate, etc. http://www.csvreader.com/posts/permissions_list.php

¿Está especificando el esquema en la tabla de destino con SqlBulkCopy? ¿Es posible que se esté ejecutando en una instancia de esquema propiedad del usuario?

También ha sido mi experiencia que SqlBulkCopy solo requiere seleccionar e insertar en la tabla de destino. BCP requiere los permisos ampliados que describió, que es otro beneficio de SqlBulkCopy.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué