2012-02-20 12 views
5

stavo attraversando lo script generato dal mio progetto di Visual Studio Database e ho trovato questo:Cosa fa "Concedi connessione su endpoint come [sa]"?

GRANT CONNECT 
    ON ENDPOINT::[TSQL Default TCP] TO PUBLIC 
    AS [sa]; 

non so ciò che fa, ma sembra di concedere l'accesso pubblico come SA (solo da come legge).

Qualcuno sa cosa fa veramente? (Clearly it grants some access via an "ENDPOINT". Ma in inglese semplice cosa fa?)

Leggendolo, mi dice che chiunque si connetta tramite la porta TCP può funzionare come [sa]. (Spero che non sia giusto, ma se lo è, perché dovrebbe farlo il progetto DB di Visual Studio?)

risposta

4

Per cominciare, il GRANT non è corretto per una ragione ovvia: usa il nome [PUBLIC] per il beneficiario, ma dovrebbe essere [public]. In un'installazione con distinzione tra maiuscole e minuscole, il nome non verrà risolto.

Ora la tua domanda: la parte AS [sa] è rilevante per l'azione di concessione dell'autorizzazione, non trasferisce al concessionario. Si legge qualcosa di simile:

io, in nome di [sa], concedere il privilegio di collegamento al [TSQL Default TCP] endpoint per i membri del gruppo [public].

In particolare, lo fa non implica che il concessionario (i membri [public]) devono essere elevato a [sa]. Concedere l'autorizzazione di connessione è un privilegio necessario ma non sufficiente per connettersi a un database. Il beneficiario richiederebbe ancora il permesso di accedere al database (cioè di avere un utente mappato al suo login nel database). Inoltre, concedere il permesso di connessione al server di principale [public] non equivale alla creazione di un account di accesso per il BUILTIN\Everyone (o BUILTIN\ANONYMOUS LOGIN per la materia ...) entità di protezione (o altri built-in account) ... In altre parole un utente NT che non ha accesso (esplicita o implicita attraverso un appartenenza al gruppo NT) in SQL Server non saranno ancora in grado di connettersi all'istanza.

Come nota a margine, in esecuzione la seguente query su qualsiasi marca nuova installazione rivela che il permesso di connettersi al default T-SQL endpoint è già concessa a [public]:

select s.name as grantee, 
    e.name as endpoint, 
    p.permission_name as permission, 
    p.state_desc as state_desc 
from sys.server_permissions p 
join sys.server_principals s on s.principal_id = p.grantee_principal_id 
join sys.endpoints e on p.major_id = e.endpoint_id 
where p.type='CO'