Honnan tudod, hogy a bejelentkezés alapján, amely az ügyfél lépett MS SQL

Honnan tudod, hogy a bejelentkezés alapján, amely az ügyfél lépett MS SQL?

Azt akarom, hogy végre egy ilyen mechanizmus: az ügyfél (Delphi program vagy valaki más) nem férnek hozzá néhány SQL SERVER táblázatban. De ő hív tárolt eljárást, mivel az ő felhasználónevet (és volt ugyanaz, mint a Windows-fiókot), megadja neki a nyilvántartást a táblázatok, amelyek célja, hogy őt. De ha belül használt tárolt eljárás:
SELECT @uname = felhasználó;
Mi van, ha a felhasználó nem tulajdonosa ennek a funkciónak, @uname = „dbo”. Úgy tűnik, ez abból adódik, hogy a tárolt eljárás nem működik a használati és az dbo.
Kérem, mondja, hogyan lehet a tárolt eljárás egy felhasználói nevet, ami miatt ez? Vagy megoldás: például kezdeni az eljárást valahonnan, átadva a felhasználó nevét érvként (de nem a Delphi :), mert Meg kell védeni, hogy a felhasználó csak kap a sorban a táblázatokat).


> GRANT?

Itt nem értettem. Jogi lehet változtatni, de a nehézség az volt, hogy csak én nem tudom, melyik felhasználó fut az eljárást.


Keresni segítséget, és hogy számos

> Look segítségért, hogy számos

SUSER_SNAME () - Ez a függvény a bejelentkezési biztonsági azonosító szám (SID).
SUSER_NAME () - és ez a függvény a felhasználónév bejelentkezési azonosító száma

De kb SUSER_NAME írva:
„SUSER_NAME visszatér a bejelentkezési név csak a bejelentkezési, hogy van egy bejegyzés a syslogins rendszer asztalra.”
így talán jobb, ha nem használja, mert Segítség van írva, hogy syslogins elavult és mégis helyébe a céllal, és jobb, ha nem használja az új fejlesztések.

A Segítség SUSER_SNAME () Én zavaros helyzetekben :)
Amikor az úgynevezett paraméter nélkül, SUSER_SNAME nevét adja vissza a jelenlegi biztonsági környezet. Amikor az úgynevezett paraméter nélkül egy adagot, amely váltott összefüggésben segítségével hajtják végre az, SUSER_SNAME nevét adja vissza a megszemélyesített kontextusban. Amikor a hívott egy megszemélyesített összefüggésben ORIGINAL_LOGIN nevét adja vissza az eredeti környezetben.

Így elhatároztam, hogy használni ORIGINAL_LOGIN ().
Mondd, kérlek, ez így van. Nem botránkozik meg podvozhdnye kövek?

Valószínűleg, azt majd használni ORIGINAL_LOGIN.


> SUSER_SNAME () - Ez a függvény a bejelentkezési név a biztonság
> Azonosítási szám (SID).
> SUSER_NAME () - és ez a függvény a felhasználónév bejelentkezési azonosító
> szám

Próbálj meg nem adja meg a SID, szigorúan, mint írtam, nem amatőr.

Írhatsz, mint

megjegyzések
Ez a funkció hasznos lehet ellenőrzésére vonatkozó eredeti kontextusában kapcsolat azonosítót. Mivel az egyéb funkciók, mint például a SESSION_USER és CURRENT_USER, visszaadja a jelenlegi végrehajtó összefüggésben ORIGINAL_LOGIN visszaadja az ID bejelentkezési, először csatlakozni az SQL Server ezen az ülésen.

példák
A következő példa kikapcsolja a végrehajtás keretében a jelenlegi ülésen, aki miatt az alábbi utasításokat login1. Funkciók SUSER_SNAME és ORIGINAL_LOGIN használni, hogy visszatérjen az aktuális munkamenet felhasználó (a felhasználó, akire az összefüggésben kapcsolók), és az eredeti fiók bejelentkezési.

Ha bekapcsolta a környezetében, akkor jobb CURRENT_USER

> Lehetőleg ne adja meg a SID, szigorúan, mint írtam, anélkül,
> Amatőr.

Ha nem adja meg, akkor én is ugyanazt a visszatérés a bejelentkezési név az aktuális felhasználó.

Felhasználási SUSER_SNAME hordozható és valójában egy álnév.

Te ev, és kérte, ha figyelmen kívül hagyjuk a kontextusban kapcsolót.

> A SUSER_SNAME hordozható és egy alias
> Valóban.

Köszönöm. Aztán fogja használni.

PS: annál, hogy annak érdekében, hogy változtatni SUSER_SNAME, a felhasználó valószínűleg még ismernünk kell a jelszót az új bejelentkezést. És ha tudja, akkor ORIGINAL_LOGIN nem menti.

Using EXECUTE a hívó egy elszigetelt nyilatkozat

Hajtják végre az HÍVÓFÉL lehet végezni a modult egy elszigetelt utasítás kapcsolja be a végrehajtás keretében a felhasználó, a hívó modul.

Tekintsük a következő tárolt eljárást hívják SqlUser2.

ORIGINAL_LOGIN nem megmenteni egy másik időpontot mutatnak bejelentkezés, amellyel
a felhasználó kezdeményezte a beszélgetést, hogy a kontextus ebben az esetben kell használni
CURRENT_USER
MSSQL sok olyan funkciókat és beállításokat.

Kapcsolódó cikkek