En SQL Server todos los objetos siempre tienen un dueño (owner) el cual tiene poder absoluto sobre el mismo, pero eso no limita que otros usuarios tengan poder sobre un objeto dado, tendrán permisos si el dueño o un usuario con poder de otorgar permisos (otorgado originalmente por el dueño o cualquier usuario que pertenezca a las funciones fijas de base de datos db_owner o a las funciones fijas de base de datos db_ddladmin y db_securityadmin).
Hay momentos en donde lo que buscamos es cambiar directamente de dueño un objeto, esto puede darse por varios motivos, eliminación del dueño (hay que tener que tener cuidado con esto o eliminaremos todos lo objetos que pertenezcan al dueño), asignación rápida de permisos completos de un usuario sobre el objeto, con respecto a si aplicamos este procedimiento por este motivo, debemos tener muy en cuenta que todos los permisos que tenía en propietario original, serán revocados, por lo tanto es conveniente extraer un script de los permisos del mismo, para volver a ejecutarlo si deseamos que siga teniendo los permisos luego.
El proceso en la versión 2000 se hace de distinto modo que en la 2005/2008, ya que fueron cambiados fuertemente las estructuras internas, para mejorar la seguridad del mismo.
En SQL Server 2000
Sintaxis:
1 | sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner' |
Ejemplo:
1 2 | EXEC sp_changeobjectowner @objname='libroDiario', @newowner='Contabilidad'; GO |
En SQL Server 2005/2008
Sintaxis:
1 2 3 4 5 6 | ALTER SCHEMA schema_name TRANSFER [ :: ] securable_name [;] ::= { Object | Type | XML Schema Collection } |
Ejemplo:
1 2 | ALTER SCHEMA Contabilidad TRANSFER libroDiario; GO |
Articulos Relacionados:









en
en
en
en
Este Query me funciono en SQL SERVER 2000/2005
<pre lang="tsql">DECLARE @old sysname, @new sysname, @sql varchar(1000)
SELECT
@old = 'wisdom'
, @new = 'dbo'
, @sql = '
IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
WHERE
QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
AND TABLE_SCHEMA = ''' + @old + '''
)
EXECUTE sp_changeobjectowner ''?'', ''' + @new + ''''
EXECUTE sp_MSforeachtable @sql
</pre>
La consulta siguiente sirvio para cambiar el owner en SQL Server 2000
<pre lang="tsql">DECLARE @old sysname, @new sysname, @sql varchar(1000)
SELECT
@old = 'Nombrepropietarioacambiar'
, @new = 'nombredenuevopropietario'
, @sql = '
IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
WHERE
QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
AND TABLE_SCHEMA = ''' + @old + '''
)
EXECUTE sp_changeobjectowner ''?'', ''' + @new + ''''
EXECUTE sp_MSforeachtable @sql </pre>
El siguiente es un SELECT que había hecho de forma a facilitarme cambiar de una sola vez el dueño en tablas, asignando como propietario de las mismas a DBO. Espero les sea útil.
<pre lang="tsql">SELECT 'EXEC SP_CHANGEOBJECTOWNER ''' + U.name + '.' + RTRIM(O.name) + ''', dbo',*
FROM SYSOBJECTS O
JOIN SYSUSERS U ON O.uid = U.uid
WHERE U.name != 'dbo'
AND O.xtype IN ('U','V','P')
AND O.status > 0</pre>
Bien corto y demasiado práctico
en su momento lo usaré..