none
Benutzerberechtigung - Schreibberechtigung wird nicht übernommen ... RRS feed

  • Frage

  • Ich habe mit einem bestimmten Benutzer ein Problem Datensätze hinzuzufügen.

    Der Benutzer ist Domänenbenutzer und kann problemlos DS lesen.

    Ich habe nun schon alles möglcihe versucht, inkl. dem Benutzer sämtliche Rechte auf der Tabelle zu geben.

    Danach sieht man tatsächlich bei Explizit Kreuzchen überall; es gibt aber grundsätzlich jeweils  2 Zeilen;

    einmal mit Kreuzchen, einmal ohne. Die Zeile mit Kreuzchen hat jeweils noch dbo dabei.

    und obwohl überall Kreuzchen sind - auch bei Aktualisieren und Einfügen taucht unter "effektiv" nur SELECT für alle Spalten auf.

    Was mache ich verkehrt?

    Ach ja: Die Gruppe Domänen-Benutzer hat bei den Sicherugsfähigen Elementen NICHTS eingetragen.

    Donnerstag, 28. Juli 2022 07:46

Antworten

Alle Antworten

  • Hallo Nico,

    zeig mal bitte Screenshots von den Dialogen mit den Berechtigungen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 28. Juli 2022 07:58
    Moderator
  • Man hat leider 3 Ebenen von Berechtigungen.
    a) Sicherheit->Anmeldungen
    b) Datenbank->Sicherheit->Benutzer und Rollen
    c) Tabelle->Eigenschaften->Berechtigungen

    Prüfe genau, auf welcher Ebene du tatsächlich Berechtigungen vergibst. Die auf der DB/Tabelle selber sind strenger.



    Donnerstag, 28. Juli 2022 17:14
  • einmal mit Kreuzchen, einmal ohne

    Spielst Du Tic-Tac-Toe oder ...
    Eine genauere Beschreibung wäre hilfreich, wo Du wie welche Rechte vergibts. Und bedenke: Deny geht vor Grant, wenn also irgendwo Berechtigungen verweigert werden, hat das vor allen anderen Rechten Vorrang.

    es gibt aber grundsätzlich jeweils 2 Zeilen;

    Dass ist ein bekannter Bug in älteren SSMS Versionen.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 29. Juli 2022 05:43
  • Hier kommt mal ein Bild

    Aus irgendeinem Grunde bleibt es effektiv bei der SELECT-Berechtigung. auch wenn auf dem ersten Bild etwas anderes erscheint.

    Der Account ist ein Domänen-Benutzer und Mitglied der Kontenverwalter

    Ich habe schon überall geschaut , aber nichts gefunden was diesem Benutzer irgendwas verbeitet
    • Bearbeitet NicoNi Freitag, 29. Juli 2022 06:21
    Freitag, 29. Juli 2022 06:20
  • Hallo Nico,

    ich würde mir zum einen die Berechtigungen noch einmal mit diesem SQL anschauen und dann die Vergabe der Berechtigung mal per T-SQL machen:

    GRANT INSERT on dbo.tblRules to [<user>];

    Und hier das Analyse-SQL:

    WITH    perms_cte(principal_name,principal_id, principal_type_desc,class_desc, [object_name], permission_name, permission_state_desc, login ) as
    (
            select USER_NAME(p.grantee_principal_id) AS principal_name,
                    dp.principal_id,
                    dp.type_desc AS principal_type_desc,
                    p.class_desc,
                    OBJECT_SCHEMA_NAME(p.major_id) +'.'+OBJECT_NAME(p.major_id) AS [object_name],
                    p.permission_name,
                    p.state_desc AS permission_state_desc,
                    sp.name as login
            from    sys.database_permissions p
            left JOIN sys.database_principals dp on p.grantee_principal_id = dp.principal_id
            left Join sys.server_principals sp   on dp.sid = sp.sid
    )
    -- users
    SELECT p.principal_name,  p.principal_type_desc, login, p.class_desc, p.[object_name], p.permission_name,
    p.permission_state_desc, cast('<explizites>' as sysname) as role_name
    FROM    perms_cte p
    UNION
    -- role members
    SELECT rm.member_principal_name, rm.principal_type_desc, rm.login, p.class_desc, p.[object_name], p.permission_name,
    coalesce(p.permission_state_desc, '<mitglied>'), rm.role_name
    FROM    perms_cte p
    right outer JOIN (
        select role_principal_id, dp.type_desc as principal_type_desc, member_principal_id,user_name(member_principal_id) as member_principal_name,
        user_name(role_principal_id) as role_name, sp.name as login
        from    sys.database_role_members rm
        INNER   JOIN sys.database_principals dp ON     rm.member_principal_id = dp.principal_id
        left    Join sys.server_principals sp on dp.sid = sp.sid
    ) rm
    ON     rm.role_principal_id = p.principal_id
    order by 2, 1, 4, 5, 6, 8;


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    Freitag, 29. Juli 2022 07:17
    Beantworter
  • Hier findest du im Bereich "Präzise Berechtigungssysteme" divese Erklärungen (incl. Poster) als auch SQL's um Detailinfos zu bekommen:

    https://docs.microsoft.com/de-de/sql/relational-databases/security/authentication-access/determining-effective-database-engine-permissions?view=sql-server-ver16

    Freitag, 29. Juli 2022 07:52
  • Ich weiss nicht warum, aber es scheint zufunktioneiren.

    Ich habe den bewussten Benutzer gelöscht und dann wieder hinzugefügt. Danach konnte ich Rechte setzen , die dann auch effektiv sind.

    Freitag, 29. Juli 2022 10:19