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'
fonte
2012-02-20 23:28:17