Domanda

Abbiamo un lavoro di agente SQL configurato per essere eseguito come utente "DBO". Questo lavoro ottiene un elenco di database definiti in sys.database Quella corrispondenza uno schema di denominazione. Il lavoro esegue quindi alcuni SQL dinamici per ripulire alcune vecchie tabelle di transazione. Il lavoro inizia contro tempdb.

Il lavoro agente funziona bene sul mio database di sviluppo (SQL Server 2008 R2 Standard Edition 10.50.2500.0). Il lavoro ottiene correttamente l'elenco dei database. Tuttavia, su un sistema clienti (SQL Server 2008 R2 Standard Edition 64-BIT 10.50.1600.1), il lavoro non trova database corrispondenti nonostante siano esistenti.

Sul sistema clienti, un semplice select * from sys.databases Eseguire contro tempdb in una finestra di query restituisce tutti e 10 i database nel sistema.

Usando il profiler, ho visto la chiamata dell'agente SQL EXECUTE AS USER = N'dbo' WITH NO REVERT Quando si esegue questo lavoro. Ho duplicato il problema usando il seguente SQL:

use tempdb

-- results: tempdb, <my SQL user>, dbo
select
    db_name() as [Current Database],
    suser_name() as [Current Context],
    user_name() as [Current User]

-- results: tempdb, 10 (which I expect)
select
    db_name() as [Current Database],
    count(*)
from sys.databases

execute as user = N'dbo'

-- results: tempdb, sa, dbo
select
    db_name() as [Current Database],
    suser_name() as [Current Context],
    user_name() as [Current User]

-- results: tempdb, 2 (?!?)
select
    db_name() as [Current Database],
    count(*)
from sys.databases

revert

Se cambio "uso tempdb" in "usa master", i risultati sono i 10 database previsti per ogni query.

Perché Sys.Database dovrebbe restituire risultati diversi quando viene eseguito come DBO utente dal database TempDB? E perché restituisce tutti i database use master Come utente DBO?

Maggiori informazioni - Se eseguo questo script in SQL Server Management Studio senza includere il revert In fondo, il mio elenco di database si restringe agli stessi due che questa query ritorna da Sys.Database.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top