2009-05-14 12 views
12

Necesito cambiar el propietario de un diagrama de base de datos en SQL Server 2005. Actualmente es propiedad de mí (domain \ username.diagramName) y me gustaría cambiarlo para que sea propiedad por dbo (dbo.diagramName). Pensé que podría usar sp_changeobjectowner, pero creo que es solo para tablas, procedimientos almacenados, etc. Creo que esto es bastante fácil, simplemente no he podido encontrar nada a través de una búsqueda en Google.Cambiar Propietario del Diagrama de Base de Datos en SQL Server 2005

Respuesta

17

Al final, tuve que quitar que los usuarios del esquema a continuación, ejecute la siguiente actualización ...

-- to identify the diagram id, name, & owner 

select * 
from dbo.sysdiagrams 


-- to manually change the owner of a diagram 
-- note: i derived that the principal_id =1 for dbo from above query 

update 
dbo.sysdiagrams set principal_id =1 where diagram_id = 1 

que terminó siendo la ayuda que necesitaba de un DBA aquí en el campus.

+0

Como se puede ver al ejecutar 'SELECT * FROM sys.database_principals',' principal_id' number 1 es el 'dbo' principal. Imagino que uno también podría considerar 'principal_id' 0, que es público. – jpmc26

2

Este artículo indica que tendrá que eliminarse como usuario de la base de datos. Abrelo con el usuario que elijas.

http://msdn.microsoft.com/en-us/library/ms171972(VS.80).aspx

+0

Cuando intento eliminar al usuario obtengo ... TITLE: Microsoft SQL Server Management Studio Falló el fallo para el usuario 'domain \ username'. (Microsoft.SqlServer.Smo) Para obtener ayuda, haga clic en: http://bit.ly/gHA9 INFORMACIÓN ADICIONAL: ha producido una excepción al ejecutar una instrucción Transact-SQL o por lotes. (Microsoft.SqlServer.ConnectionInfo) El principal de la base de datos posee un esquema en la base de datos y no se puede descartar. (Microsoft SQL Server, Error: 15138) Para obtener ayuda, haga clic en: http://bit.ly/2lzKpz – Jason

+0

Imagino que hay un esquema llamado 'jason' que tendrá que cambiar el objeto de ese esquema a la misma. http://msdn.microsoft.com/en-us/library/ms173423.aspx –

+0

Eliminé el esquema y pude eliminar al usuario. Cuando volví al diagrama, el propietario cambió a público. Todavía no es lo que quiero. ¿Alguna más sugerencia? – Jason

0

A pesar de que no habría ayudado en este caso (ya que sólo recrea toda la fila sysdiagrams), estos scripts

ScriptDiagram2005 o ScriptDiagram2008

le permiten crear una secuencia de comandos INSERT de el "contenido" de los diagramas, que se volverá a ejecutar contra la base de datos de origen (o una copia de seguridad, o una copia con guiones, o lo que sea). Podría fácilmente (sabiendo lo que sabe ahora sobre principal_id) volver a crear el diagrama con un nuevo propietario también.

Sólo tiene que encontrar y editar el resto de esta declaración en el guión

INSERT INTO sysdiagrams ([name], [principal_id], [version], [definition]) 

el beneficio real es ser capaz a la fuente de control/copia de seguridad del archivo de texto ...

14
UPDATE dbo.sysdiagrams 
SET principal_id = 1 

Conjunto una Cláusula WHERE si es necesario. El texto anterior sugiere que debe eliminar al usuario de la base de datos, pero no tuve que hacer eso. Estoy usando SQL2008 R2.

5
USE [db_name] 
UPDATE dbo.sysdiagrams 
SET principal_id = 1 

si la declaración anterior no funciona, puede tener una edición en esta tabla con el botón derecho del ratón sobre los dbo.sysdiagrams y seleccione Editar top 200 filas, entonces se puede establecer la columna principal_id para todos los registros establecidos manualmente a 1

+0

El método no sql funcionó para mí. Al principio no entendí del todo qué significaba @hamed aj, pero sí, para ser más explícito, en System Tables, haga clic en dbo.sysdiagrams y elija editar las 200 filas superiores. En la tabla que se muestra a continuación, simplemente encuentra la fila que define su diagrama de interés y cambia el valor en el principal_id a 1. Vaya a actualizar la lista de diagramas y verá que se actualiza a dbo como propietario. –

Cuestiones relacionadas