2012-02-20 11 views
5

szedłem skryptu wygenerowanego przez mojego projektu Visual Studio Database i znalazłem to:Co robi program "Grant Connect on Endpoint as [sa]"?

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

Nie wiem, co robi, ale wydaje się, aby udzielić publicznego dostępu SA (jako po prostu, jak to czyta).

Ktoś wie, co to naprawdę robi? (Clearly it grants some access via an "ENDPOINT") Ale po angielsku, co to robi?)

Po prostu czytając to, mówi mi, że każdy łączący się przez port TCP może działać jako [sa]. (Mam nadzieję, że to nie jest w porządku, ale jeśli tak, to dlaczego projekt DB Visual Studio miałby to zrobić?)

Odpowiedz

4

Na początek GRANT jest nieprawidłowy z jednego oczywistego powodu: używa nazwy [PUBLIC] dla beneficjenta, ale powinno być [public]. W przypadku instalacji uwzględniającej wielkość liter nazwa nie zostanie rozstrzygnięta.

Teraz, jeśli chodzi o twoje pytanie: część AS [sa] jest istotna dla akcji przyznawania uprawnień, nie przechodzi do beneficjenta. To brzmi mniej więcej tak:

I, w imię [sa], przyznać przywilej łączenia się z [TSQL Default TCP] końcowego członkom grupy [public].

W szczególności, nie ma oznacza, że ​​uprawniony (członkowie [public]) mają być podniesiony do [sa]. Udzielenie pozwolenia na połączenie jest koniecznym, ale niewystarczającym uprzywilejowanym sposobem łączenia się z bazą danych. Uprawniony nadal wymagałby pozwolenia na dostęp do bazy danych (tj. Aby użytkownik był mapowany na swój login w bazie danych). Ponadto przyznanie uprawnień do łączenia się z głównym serwerem serwera [public] nie jest równoznaczne z utworzeniem loginu dla BUILTIN\Everyone (lub BUILTIN\ANONYMOUS LOGIN dla sprawy ...) podmiotów zabezpieczeń (lub innego użytkownika built-in account) ... Innymi słowy użytkownik NT, który nie ma loginu (jawne lub niejawne za pośrednictwem członkostwa w grupach NT) w SQL Server nadal nie będzie w stanie połączyć się z wystąpieniem.

Na marginesie, uruchamiając następujące kwerendy na dowolnej marki nowej instalacji wynika, że ​​uprawnienie do łączenia się z punktem końcowym domyślnie T-SQL jest już udzielonej [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'