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.