CREATE PROCEDURE [dbo].[SetPolicy]
@ItemName as nvarchar(425),
@ItemNameLike as nvarchar(850),
@PrimarySecDesc as image,
@SecondarySecDesc as ntext = NULL,
@XmlPolicy as ntext,
@AuthType int,
@PolicyID uniqueidentifier OUTPUT
AS
SELECT @PolicyID = (SELECT PolicyID FROM Catalog WHERE Path = @ItemName AND PolicyRoot = 1)
IF (@PolicyID IS NULL)
BEGIN
SET @PolicyID = newid()
INSERT INTO Policies (PolicyID, PolicyFlag)
VALUES (@PolicyID, 0)
INSERT INTO SecData (SecDataID, PolicyID, AuthType, XmlDescription, NTSecDescPrimary, NtSecDescSecondary)
VALUES (newid(), @PolicyID, @AuthType, @XmlPolicy, @PrimarySecDesc, @SecondarySecDesc)
DECLARE @OldPolicyID as uniqueidentifier
SELECT @OldPolicyID = (SELECT PolicyID FROM Catalog WHERE Path = @ItemName)
UPDATE Catalog SET PolicyID = @PolicyID, PolicyRoot = 1 WHERE Path = @ItemName
UPDATE Catalog SET PolicyID = @PolicyID
WHERE Path LIKE @ItemNameLike ESCAPE '*'
AND Catalog.PolicyID = @OldPolicyID
END
ELSE
BEGIN
UPDATE Policies SET
PolicyFlag = 0
WHERE Policies.PolicyID = @PolicyID
DECLARE @SecDataID as uniqueidentifier
SELECT @SecDataID = (SELECT SecDataID FROM SecData WHERE PolicyID = @PolicyID and AuthType = @AuthType)
IF (@SecDataID IS NULL)
BEGIN
INSERT INTO SecData (SecDataID, PolicyID, AuthType, XmlDescription ,NTSecDescPrimary, NtSecDescSecondary)
VALUES (newid(), @PolicyID, @AuthType, @XmlPolicy, @PrimarySecDesc, @SecondarySecDesc)
END
ELSE
BEGIN
UPDATE SecData SET
XmlDescription = @XmlPolicy,
NtSecDescPrimary = @PrimarySecDesc,
NtSecDescSecondary = @SecondarySecDesc
WHERE SecData.PolicyID = @PolicyID
AND AuthType = @AuthType
END
END
DELETE FROM PolicyUserRole WHERE PolicyID = @PolicyID
GO
GRANT EXECUTE ON [dbo].[SetPolicy] TO [RSExecRole]
GO