Page 1 of 1

Benutzerrollen kopieren

Posted: 14. Aug 2014, 09:13
by Marian
Hallo,

gibt es eine Möglichkeit Benutzerrollen zu kopieren?

Ich möchte z.B. für den 1st lvl Support eine Rolle erstellen und diese kopieren. Dann würde ich die kopierte umbenennen (z.B. 2-lvl-Support) und um Rechte erweitern oder einschränken.

Gruß

Re: Benutzerrollen kopieren

Posted: 18. Aug 2014, 12:22
by Hubibi
Neue Rolle vorher anlegen und "leer" lassen. Dann im SQL Skript bei Ziel den Namen der neuen Rolle angeben, bei Quelle den Namen der Quellrolle ;-)

Code: Select all

/*
Kopieren der Rechte einer Benutzerrolle
VERWENDUNG AUF EIGENE GEFAHR

- manuelle Anlage der neuen Rolle
- Pflege der Quelle (von dort werden Daten übernommen)
- Pflege Ziel (dort werden erst Rechte entfernt, dann neu gesetzt)
- Einschränkungen über OU/Location werden nicht berücksichtigt, manuell nachpflegen

*/
DECLARE @Quelle AS NVARCHAR(50)
DECLARE @Ziel AS NVARCHAR(50)
DECLARE @QuelleID AS NVARCHAR(50)
DECLARE @ZielID AS NVARCHAR(50)
DECLARE @ZielCID AS NVARCHAR(50)
SET @Quelle = 'LHS Assetmanager Amt 10 Read'	-- Datenpflege achtung, Lokalisierung
SET @Ziel = 'LHS Assetmanager Amt 15 Read'		-- Datenpflege

SET @QuelleID = 
(SELECT [Expression-ObjectID]
FROM SPSSecurityClassRole scr
WHERE scr.Name = @Quelle)

SET @ZielID = 
(SELECT [Expression-ObjectID]
FROM SPSSecurityClassRole scr
WHERE scr.Name = @Ziel)

SET @ZielCID = 
(SELECT [ID]
FROM SPSSecurityClassRole scr
WHERE scr.Name = @Ziel)

--SELECT @QuelleID, @ZielID

/* Typenrechte löschen */
DELETE FROM PLSCTypeRule
WHERE ID IN
(SELECT tr.ID
FROM SPSSecurityClassRole scr
--INNER JOIN SPSScRoleClassBase rcb ON scr.[Expression-ObjectID] = rcb.[Expression-ObjectID]
INNER JOIN SPSCommonClassBase com ON scr.[Expression-ObjectID] = com.[Expression-ObjectID]
--LEFT JOIN PLSCRuleDimensionOU rdOU ON rcb.[Expression-ObjectID] = rdOU.[Expression-ObjectID]
--LEFT JOIN PLSCRuleDimensionOU rdLoc ON rcb.[Expression-ObjectID] = rdLoc.[Expression-ObjectID]
LEFT JOIN PLSCTypeRule tr ON scr.[Expression-ObjectID] = tr.[Expression-ObjectID] --Typenrechte
--LEFT JOIN PLSCAccessRule ar ON rcb.[Expression-ObjectID] = ar.[Expression-ObjectID] --Rechte Aktionen
WHERE tr.[Expression-ObjectID] = @ZielID
)

/* Typenrechte einfügen */
INSERT INTO PLSCTypeRule
(ID,[Read],[Insert],[Write],[Delete],[Type], UsedInTypeSPSSecurityTypeRole)
SELECT 
NEWID(),
tr.[Read],
tr.[Insert],
tr.[Write],
tr.[Delete],
tr.[Type],
@ZielID
FROM SPSSecurityClassRole scr
--INNER JOIN SPSScRoleClassBase rcb ON scr.[Expression-ObjectID] = rcb.[Expression-ObjectID]
INNER JOIN SPSCommonClassBase com ON scr.[Expression-ObjectID] = com.[Expression-ObjectID]
--LEFT JOIN PLSCRuleDimensionOU rdOU ON rcb.[Expression-ObjectID] = rdOU.[Expression-ObjectID]
--LEFT JOIN PLSCRuleDimensionOU rdLoc ON rcb.[Expression-ObjectID] = rdLoc.[Expression-ObjectID]
LEFT JOIN PLSCTypeRule tr ON scr.[Expression-ObjectID] = tr.[Expression-ObjectID] --Typenrechte
--LEFT JOIN PLSCAccessRule ar ON rcb.[Expression-ObjectID] = ar.[Expression-ObjectID] --Rechte Aktionen
WHERE scr.[Expression-ObjectID] = @QuelleID
AND @ZielID IS NOT NULL

/* Aktionsrechte entfernen */
DELETE FROM PLSCAccessRule
WHERE ID IN
(SELECT ar.ID
FROM SPSSecurityClassRole scr
--INNER JOIN SPSScRoleClassBase rcb ON scr.[Expression-ObjectID] = rcb.[Expression-ObjectID]
INNER JOIN SPSCommonClassBase com ON scr.[Expression-ObjectID] = com.[Expression-ObjectID]
--LEFT JOIN PLSCRuleDimensionOU rdOU ON rcb.[Expression-ObjectID] = rdOU.[Expression-ObjectID]
--LEFT JOIN PLSCRuleDimensionOU rdLoc ON rcb.[Expression-ObjectID] = rdLoc.[Expression-ObjectID]
--LEFT JOIN PLSCTypeRule tr ON rcb.[Expression-ObjectID] = tr.[Expression-ObjectID] --Typenrechte
LEFT JOIN PLSCAccessRule ar ON scr.[Expression-ObjectID] = ar.[Expression-ObjectID] --Rechte Aktionen
WHERE ar.[Expression-ObjectID] = @ZielID
)

/* Aktionsrechte setzen */
INSERT INTO PLSCAccessRule
(ID, [Execute], [Action], UsedInTypeSPSSecurityTypeRole)
SELECT 
NEWID(),
ar.[Execute],
ar.[Action],
@ZielID
FROM SPSSecurityClassRole scr
--INNER JOIN SPSScRoleClassBase rcb ON scr.[Expression-ObjectID] = rcb.[Expression-ObjectID]
INNER JOIN SPSCommonClassBase com ON scr.[Expression-ObjectID] = com.[Expression-ObjectID]
--LEFT JOIN PLSCRuleDimensionOU rdOU ON rcb.[Expression-ObjectID] = rdOU.[Expression-ObjectID]
--LEFT JOIN PLSCRuleDimensionOU rdLoc ON rcb.[Expression-ObjectID] = rdLoc.[Expression-ObjectID]
--LEFT JOIN PLSCTypeRule tr ON rcb.[Expression-ObjectID] = tr.[Expression-ObjectID] --Typenrechte
LEFT JOIN PLSCAccessRule ar ON scr.[Expression-ObjectID] = ar.[Expression-ObjectID] --Rechte Aktionen
WHERE scr.[Expression-ObjectID] = @QuelleID
AND @ZielID IS NOT NULL


/* Tab- und Dialogerechte entfernen */
DELETE FROM [SchemaRelation-SPSSecurityClassRole2SPSContentClassObjectDialogTab]
WHERE ID IN
(SELECT r2d.ID
FROM SPSSecurityClassRole scr
--INNER JOIN SPSScRoleClassBase rcb ON scr.[Expression-ObjectID] = rcb.[Expression-ObjectID]
INNER JOIN [SchemaRelation-SPSSecurityClassRole2SPSContentClassObjectDialogTab] r2d
	ON scr.ID = r2d.VisibleDialogTabs
WHERE scr.[Expression-ObjectID] = @ZielID
)


/* Tab- und Dialogerechte setzen */
INSERT INTO [SchemaRelation-SPSSecurityClassRole2SPSContentClassObjectDialogTab]
(ID, VisibleRoles, VisibleDialogTabs)
SELECT 
NEWID(),
r2d.VisibleRoles,
@ZielCID
FROM SPSSecurityClassRole scr
--INNER JOIN SPSScRoleClassBase rcb ON scr.[Expression-ObjectID] = rcb.[Expression-ObjectID]
INNER JOIN [SchemaRelation-SPSSecurityClassRole2SPSContentClassObjectDialogTab] r2d
	ON scr.ID = r2d.VisibleDialogTabs
WHERE scr.[Expression-ObjectID] = @QuelleID
AND @ZielID IS NOT NULL




Re: Benutzerrollen kopieren

Posted: 20. Aug 2014, 09:52
by Marian
Danke Hubibi,

derzeit bekomme ich aber noch folgende Fehlermeldung:

Meldung 208, Ebene 16, Status 1, Zeile 9
Ungültiger Objektname 'SPSSecurityClassRole'.

Ich nehme aber mal an das dies ein Berechtigungsproblem ist. Ich werde dies dann mit dem SA versuchen sobald ich die Dokumentation mit dem PW bekomme.

Re: Benutzerrollen kopieren

Posted: 22. Aug 2014, 10:01
by Marian
Hallo Hubibi,

leider bringt er auch mit dem sa Benutzer die gleiche Fehlermeldung:

Meldung 208, Ebene 16, Status 1, Zeile 9
Ungültiger Objektname 'SPSSecurityClassRole'.

Das Objekt ist ihm leider unbekannt.

Re: Benutzerrollen kopieren

Posted: 22. Aug 2014, 12:50
by Sven_Puth
Ist die richtige Datenbank ausgewählt?
Bei neuen Abfragen ist standardmäßig die 'master' DB ausgewählt und in dem SQL Statement gibt es kein "USE M42Production"

Re: Benutzerrollen kopieren

Posted: 25. Aug 2014, 06:53
by Marian
Hallo,

ja es war die falsche DB ausgwählt.

Gleich noch eine Frage: (da er mir als Ergebnis "0 Zeile(n) betroffen" ausgibt)

Quelle = 'Name der Rolle'
Ziel = 'Name der Zielrolle'

wobei Name der String ist, den ich im UI im Feld Name eingegeben habe?

Re: Benutzerrollen kopieren

Posted: 25. Aug 2014, 09:28
by Hubibi
Ja

Re: Benutzerrollen kopieren

Posted: 29. Jun 2015, 12:54
by mhausl
Das Script tut bei mir nix. Läuft zwar fehlerfrei durch, aber eine neue Rolle scheint danach nicht auf.
Kann es sein, dass sich da im DB-Schema was geändert hat?

Re: Benutzerrollen kopieren

Posted: 29. Jun 2015, 13:15
by mhausl
hat sich erledigt! Lesen sollte man können!!

--> "manuelle Anlage der neuen Rolle"

Damit funktioniert es auch ;-)