Determinar qué objetos creados por el usuario en SQL Server


Estoy tratando de ir a través de nuestro desarrollo DB ahora y limpieza de algunos de los viejos prueba procs/tablas. ¿Es posible determinar qué objetos creados por el usuario en una base de datos SQL Server 2005? Si es así, ¿cómo encontraría esa información?

Editar: Solo quería aclarar que los objetos en cuestión ya existen. Configurar la auditación y los disparadores probablemente no me haría mucho bien. Supongo que estaba buscando sobre todo una manera de utilizar las tablas/vistas del sistema para llegar a la información.

Author: bcasp, 2009-08-10

5 answers

La respuesta es "no, probablemente no puedas".

Si bien hay cosas allí que podrían decir quién creó un objeto dado, hay muchos "si" detrás de ellos. Una revisión rápida (y no necesariamente completa):

Sys.objects (and thus sys.tablas, sys.procedimientos, sys.vistas, etc.) tiene la columna principal_id. Este valor es una clave foránea que se relaciona con la lista de usuarios de la base de datos, que a su vez se puede unir con la lista de inicios de sesión SQL (instancia). (Toda esta información se puede encontrar en más vistas del sistema.)

Pero.

Una revisión rápida de nuestra configuración aquí y una revisión superficial de BOL indica que este valor solo se establece (es decir, no null) si es "diferente del propietario del esquema". En nuestro sistema de desarrollo, y tenemos dbo + otros dos esquemas, todo aparece como NULO. Esto es probablemente porque todo el mundo tiene derechos de dbo dentro de estas bases de datos.

Esto está usando autenticación NT. La autenticación SQL probablemente funciona de la misma manera. Además, ¿todos tienen y utilizar un inicio de sesión único, o son compartidos? Si tiene rotación de empleados y los inicios de sesión de dominio (o SQL) se eliminan, una vez más los datos pueden no estar allí o pueden estar incompletos.

Puede buscar estos datos (seleccione * de sys.objetos), pero si principal_id es null, probablemente no tengas suerte.

 30
Author: Philip Kelley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-10 17:18:27

Si el objeto se creó recientemente, puede consultar el informe del Historial de Cambios de esquema, dentro de SQL Server Management Studio, que "proporciona un historial de todas las ejecuciones de instrucciones DDL confirmadas dentro de la Base de datos registradas por el seguimiento predeterminado":

introduzca la descripción de la imagen aquí

Luego puede buscar las instrucciones create de los objetos. Entre toda la información mostrada, está el nombre de inicio de sesión de quien ejecutó la instrucción DDL.

 35
Author: Guillermo Gutiérrez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-19 07:39:41

Si cada usuario tiene su propio login de SQL Server, puede probar esto

select 
    so.name, su.name, so.crdate 
from 
    sysobjects so 
join 
    sysusers su on so.uid = su.uid  
order by 
    so.crdate
 13
Author: CruelIO,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-03 16:29:17

Si necesita un mecanismo pequeño y específico, puede buscar DLL Triggers info.

 1
Author: Jonathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-22 08:23:44

¿Ha intentado esta consulta:

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName,
last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( '<db name>')
AND OBJECT_ID=OBJECT_ID('<table name>')
 0
Author: Yoosaf Abdulla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-18 22:36:55