Benutzer mit den meisten Antworten
MSSQL User Rechte abfragen.

Frage
-
Ist es möglich die rechte aller user auf Datenbanken ab zu fragen.
Ich habe auch changedatabase überlegt ich finde aber kein boolean der mir sagt ob der aktuelle user nun zugriff hat oder nicht.
das problem ist das mit dem entsprechenden user auch andere programm optionen möglich sein sollen und das ohne lokal daten zu speichern, wer was kann oder darf.
vb.net
danke im voraus...
PS: am besten wäre ein sql befehl der mir sagt welcher user auf welche db zugriff hat.
Antworten
-
Hallo,
Du mußt dort den Datenbank-Benutzernamen angeben, und
nicht etwa das Anmeldekonto - denn das sind zwei unterschiedliche Dinge.Ein Skript für die Northwind - der Kürze wegen relativ sinnfrei, was die Berechtigungen angeht.
Zunächst die Anlage der Rolle, hier ist der "dbo" Besitzer der Datenbankrolle.-- Anlage einer Rolle USE [Northwind] GO -- Vertriebsrolle Besitzer ist dbo CREATE ROLE [VertriebRolle] AUTHORIZATION [dbo]; -- Was für die Anzeige EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Eine Beispiel-Datenbankrolle' , @level0type=N'USER', @level0name=N'VertriebRolle'; GO -- Customers: Angucken und Ändern GRANT VIEW DEFINITION, SELECT, UPDATE ON [dbo].[Customers] TO [VertriebRolle]; -- Products: Angucken und Ändern GRANT SELECT ON [dbo].[Products] TO [VertriebRolle]; -- Orders: Angucken, Einfügen, Ändern, Löschen GRANT VIEW DEFINITION, SELECT, INSERT, UPDATE, DELETE ON [dbo].[Orders] TO [VertriebRolle] GRANT VIEW DEFINITION, SELECT, INSERT, UPDATE, DELETE ON [dbo].[Order Details] TO [VertriebRolle]; GO
Und nun für eine Anmeldekonto "BenutzerKonto", das den Datenbankbenutzer "Benutzer" verwendet:
USE [master] GO -- Anmeldekonto mit Standard-Authentifizierung CREATE LOGIN [BenutzerKonto] WITH PASSWORD=N'Kennwort' MUST_CHANGE, DEFAULT_DATABASE = [Northwind], DEFAULT_LANGUAGE = [Deutsch], CHECK_EXPIRATION = ON, CHECK_POLICY = ON; GO -- Anlage des Datenbankbenutzers "Benutzer" USE [Northwind] GO -- Anlage des Datenbank-Benutzers -- hier abweichend vom Konto zur Verdeutlichung CREATE USER [Benutzer] FOR LOGIN [BenutzerKonto] WITH DEFAULT_SCHEMA = [dbo]; GO -- Mitglied in der VertriebRolle EXEC sp_addrolemember N'VertriebRolle', N'Benutzer' GO
Gruß Elmar- Als Antwort markiert aktony Donnerstag, 22. Juli 2010 05:36
Alle Antworten
-
Hallo,
für eine bestimmte Datenbank könnte Dir
select * from sys.database_principals
helfen.Für die Rechte des einzelnen Users wäre sys.database_permissions hilfreich
http://msdn.microsoft.com/de-de/library/ms188367.aspxGruß
Christa -
Schau doch mal hier rein:
http://www.insidesql.org/beitraege/administration/serverweite-berechtigungen-und-verwaiste-benutzerund dazu auch den Kommentar von tosc, der hierhin führt:
http://www.insidesql.org/faq/verwaiste-sql-server-kontenbzw.
http://www.insidesql.org/beitraege/administration/berechtigungen-detailiert-anzeigenEinen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org -
Ok danke aber so richtig komme ich nicht damit klar.
irgend wie zeigt der server mir nur einige benutzer an also nicht alle so fehlt z.b. "SA" , und ein anderer benutzer den ich angelegt habe.
select * from sysusers --where name = 'sa'
wenn ich jetzt die Procedur nehme die verweiste benutzer anzeigt und ein wenig veränder.
IF DB_ID('Fahrzeugeinsatz') > 4 SELECT 'Fahrzeugeinsatz' as DBName, name AS UserName, sid AS UserSID FROM .sysusers WHERE issqluser = 1 AND ( --sid IS NOT NULL AND sid >= 0x0 ) --AND suser_sname(sid) IS NULL ORDER BY name
zeigt er auch nur einen echten benutzer an.
-
Hallo,
auch um Meta-Daten wie Berechtigungen oder Konfigurationswerte auslesen zu können, benötigt man entsprechende Rechte.
Hat man die nicht, kann man z.B. aus Sys.SysUsers auch nur einen User auslesen; nämlich den eigenen.
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de -
das ist das seltsame ich bin als SA drin.
es ist ja schon so das nicht nur ein user angezeigt wird sondern ist es so das der dann auch noch auf datenbanken rechte hat wo er keine haben sollte.
jetzt muss ich mal nin bsp. geben vieleicht verstehe ich da auch nur irgend was falsch.
ich erstelle nin user xy der soll auf db xy voll zugriff haben wenn ich jetzt sage das der owner ist sollte dieser user nur DB xy sehen und auch drauf zugreifen können oder.
jetzt erstelle ich noch einen user qw der ist owner auf qw so gleiches spiel.
nun aber ist es so das wenn ich via programm vb.net mit user xy eine verbindung herstelle geht das nur mit DB xy soweit alles top. wenn ich nun mich direkt am server anmelde sehe ich aber mit user xy auch DB qw das ist doch schon nicht richtig oder ?
wenn ich nun den SQL befehl wie oben ausführe sehe ich immer nur benutzer qw egal mit welchen account ich mich am server anmelde?
vieleicht wäre eine sql abfrage bei welcher DB der entsprechende user owner ist eigentlich schon hilfreich.
PS: wie lösche ich verweiste benutzer ??
-
Hallo,
aus Deiner Beschreibung ist die Quintessenz nur schwer zu ermitteln.
Grundsätzlich unterscheider der SQL Server (ab 2005) sehr fein,
wer was wann und wo sehen darf, siehe Berechtigungen und
Konfigurieren der Sichtbarkeit von Metadaten und wem das zu fein ist:
Behandlung von Problemen bei der Sichtbarkeit von MetadatenWillst Du explizite Berechtigungen einfügen kannst Du zum einen
mit Funktionen wie HAS_PERMS_BY_NAME oder auch über die
Funktion fn_my_permissions , die aktuellen Berechtigungen abfragen
(auf sys.users und Co. sollte man in der Regel verzichten)Im einfachsten Falle reicht es für ein (VB.NET) Programm seine
SELECT Anweisung abzusetzen. Gehts nicht, gibt es einen Fehler.
Willst Du Deinem Programm ein Rollenkonzept verpassen,
bietet sich das Einrichten von eigenen Datenbankrollen an,
darauf kannst Du direkt z. B. via IS_MEMBER abfragen
und die Ansichten in Deinem Programm entsprechend konfigurieren.Gruß Elmar
-
ok ich habe jetzt alle rechte noch mal neu eingestellt jetzt können auch am server direkt jeder user nur auf seine DB zugreifen.
woran es nun lag ich weiss es nicht.
rollenkonzept das klingt gut den wenn ich eine select absetze kann ich zwar alles mit einer exeption abfangen aber die einstellungen übernimmt das prog. dann nicht so richtig.
wie richte ich das dann ein ?
-
Hallo,
das kann Du über das SSMS machen, dort unter Sicherheit -> Datenbankrollen
oder über gespeicherte Prozeduren wie sp_addrole , sp_addrolemember usw.Gruß Elmar
- Bearbeitet Elmar Boye Sonntag, 27. Juni 2010 11:22 Datenbankrollen nicht Anwendungsrollen
-
Mh irgendwie mach er das nicht.
fehler:
Meldung 15151, Ebene 16, Status 1, Zeile 1
Suchen des Benutzer-Objekts 'RKA_user' ist nicht möglich, weil das Objekt nicht vorhanden ist oder Sie nicht die erforderliche Berechtigung haben.ich bin als sa drin und den user 'RKA_user' gibt es.
sp_addrole @rolename = 'RKA', @ownername = 'RKA_user'
was geht ist..
create role RKA
dann zeigt mir der mamager die role aber nicht an.
und wenn ich das ganze um
CREATE ROLE role_name [ AUTHORIZATION owner_name ]
mache gibt er mir die gleiche meldung.
geht das mit express vieleicht garnicht.
-
Hallo,
Du mußt dort den Datenbank-Benutzernamen angeben, und
nicht etwa das Anmeldekonto - denn das sind zwei unterschiedliche Dinge.Ein Skript für die Northwind - der Kürze wegen relativ sinnfrei, was die Berechtigungen angeht.
Zunächst die Anlage der Rolle, hier ist der "dbo" Besitzer der Datenbankrolle.-- Anlage einer Rolle USE [Northwind] GO -- Vertriebsrolle Besitzer ist dbo CREATE ROLE [VertriebRolle] AUTHORIZATION [dbo]; -- Was für die Anzeige EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Eine Beispiel-Datenbankrolle' , @level0type=N'USER', @level0name=N'VertriebRolle'; GO -- Customers: Angucken und Ändern GRANT VIEW DEFINITION, SELECT, UPDATE ON [dbo].[Customers] TO [VertriebRolle]; -- Products: Angucken und Ändern GRANT SELECT ON [dbo].[Products] TO [VertriebRolle]; -- Orders: Angucken, Einfügen, Ändern, Löschen GRANT VIEW DEFINITION, SELECT, INSERT, UPDATE, DELETE ON [dbo].[Orders] TO [VertriebRolle] GRANT VIEW DEFINITION, SELECT, INSERT, UPDATE, DELETE ON [dbo].[Order Details] TO [VertriebRolle]; GO
Und nun für eine Anmeldekonto "BenutzerKonto", das den Datenbankbenutzer "Benutzer" verwendet:
USE [master] GO -- Anmeldekonto mit Standard-Authentifizierung CREATE LOGIN [BenutzerKonto] WITH PASSWORD=N'Kennwort' MUST_CHANGE, DEFAULT_DATABASE = [Northwind], DEFAULT_LANGUAGE = [Deutsch], CHECK_EXPIRATION = ON, CHECK_POLICY = ON; GO -- Anlage des Datenbankbenutzers "Benutzer" USE [Northwind] GO -- Anlage des Datenbank-Benutzers -- hier abweichend vom Konto zur Verdeutlichung CREATE USER [Benutzer] FOR LOGIN [BenutzerKonto] WITH DEFAULT_SCHEMA = [dbo]; GO -- Mitglied in der VertriebRolle EXEC sp_addrolemember N'VertriebRolle', N'Benutzer' GO
Gruß Elmar- Als Antwort markiert aktony Donnerstag, 22. Juli 2010 05:36
-
ok super ich habe den server noch mal neu gemacht war mir zu viel verstellt.
so bis auf das hat alles auch gefunkt.
-- Customers: Angucken und Ändern GRANT VIEW DEFINITION, SELECT, UPDATE ON [dbo].[Customers] TO [VertriebRolle]; -- Products: Angucken und Ändern GRANT SELECT ON [dbo].[Products] TO [VertriebRolle]; -- Orders: Angucken, Einfügen, Ändern, Löschen GRANT VIEW DEFINITION, SELECT, INSERT, UPDATE, DELETE ON [dbo].[Orders] TO [VertriebRolle] GRANT VIEW DEFINITION, SELECT, INSERT, UPDATE, DELETE ON [dbo].[Order Details] TO [VertriebRolle]; GO
was mir dann aufviel ist das jetzt in der DB ansich der ordner sicherheit auftauchte.
war meiner meinung nach nicht. ich konnte die rechte dann ja manuel setzen.
Wie kann ich die role nun abfragen?
-
Hallo,
wie Du die Rechte abfragen kannst, hatte ich oben schon beschrieben:
Willst Du Deinem Programm ein Rollenkonzept verpassen,
bietet sich das Einrichten von eigenen Datenbankrollen an,
darauf kannst Du direkt z. B. via IS_MEMBER abfragen
und die Ansichten in Deinem Programm entsprechend konfigurieren.Gruß Elmar
-
mh ich benutze diese
use [TESTdb] go IF IS_MEMBER ('testrole') = 1 PRINT 'Current user is a member of the FErole role' ELSE IF IS_MEMBER ('testrole') = 0 PRINT 'Current user is NOT a member of the FErole role' ELSE IF IS_MEMBER ('testrole') IS NULL PRINT 'ERROR: Invalid group / role FErole specified' GO
Antwort:
Current user is NOT a member of the testrole role
Bei den eigenschaften steht der Role steht nur testuser und bei dem testanmeldung?
was testet er da den benutzer oder die anmeldung.
fehlt hier vieleicht nin schema?
- Bearbeitet aktony Dienstag, 29. Juni 2010 08:14 vergessen
-
Hallo,
Datenbank-Rollen arbeiten mit dem Datenbankbenutzer (und nicht dem Konto).
Die Angabe AUTHORIZATION bei CREATE ROLE legt auf den Besitzer fest.
Und das sollte nicht der Nutzer der Rolle selbst sein, sondern ein höherberechtigter
Datenbankbenutzer, im Zweifelsfalle der Datenbankbesitzer (eben dbo).Neustarts sind nicht erforderlich, nur eine Ab- und erneute Anmeldung für das
Gruß Elmar
Konto, das man testet. Denn die Berechtigungen werden nach der Anmeldung
zwischengespeichert. -
genau das hat er dann irgendwie nicht gemacht egal mit wenn ich mich anmeldete waren alle testuser.
aber egal jetzt funkt´s.
PS: ich habe glaube ne nochbessere lösung gefunden.
sp_helplogins
muss nur mal sehen wie das mit den user ist aber erste tests geben ne Tabelle mit Anmeldenamen + zugeordneten DB´s.
-
Hallo,
für Informationen zu den Rollen, solltest Du eher verwenden
sp_helprole
sp_helprolememberDabei handelt es sich aber (wie bei allen sp_help.... Prozeduren)
um Informationsfunktionen. Für eine konkrete Abfrage im Code ist
IS_MEMBER besser und schneller.Was den Link angeht: Beachte das sich vieles mit SQL Server 2005++
beim Rechtekonzept geändert hat und nicht immer 1 : 1 übernommen
werden kann. Wobei den Datenbankrollen eher wenig passiert ist.Sicherheitsprozeduren wie sp_addlogin und Co, die in dem Artikel noch
verwendet werden, sollte man nicht mehr verwenden, da sie in einer der
nächsten Versionen verschwinden werden.
Und anstatt dessen die T-SQL Befehle wie CREATE LOGIN und Co verwenden.Gruß Elmar