Reporting services 如何使用TSQL删除SSRS中的用户

Reporting services 如何使用TSQL删除SSRS中的用户,reporting-services,ssrs-2008-r2,Reporting Services,Ssrs 2008 R2,我想删除SSRS中的一些用户。 我尝试跑步的地方: DELETE FROM dbo.Users WHERE dbo.Users.UserName = 'domain\user' 我得到以下错误: Msg 547, Level 16, State 0, Line 1 The DELETE statement conflicted with the REFERENCE constraint "FK_Catalog_CreatedByID". The conflict

我想删除SSRS中的一些用户。 我尝试跑步的地方:

DELETE FROM dbo.Users
WHERE dbo.Users.UserName = 'domain\user'    
我得到以下错误:

  Msg 547, Level 16, State 0, Line 1
 The DELETE statement conflicted with the REFERENCE constraint       
 "FK_Catalog_CreatedByID". The conflict occurred in database "ReportServer",       
 table "dbo.Catalog", column 'CreatedByID'.
 The statement has been terminated.

如何从SSRS数据库中删除用户及其所有权限?

错误很明显,您的其他表中有数据引用了您试图删除的用户表

所以你有两个选择:

从用户表中删除约束,然后删除记录并再次应用所有约束。 从引用用户表的引用表中删除数据。
我遇到了同样的问题,我想从SSRS数据库中永久删除用户。所以我以前做过SQL语法备份你的数据库!:

DECLARE @username varchar(255); SET @username = '<username>';
DECLARE @ownerid uniqueidentifier; SET @ownerid = (SELECT UserID FROM Users WHERE UserName = @username)

BEGIN TRAN

  UPDATE Subscriptions SET ModifiedByID = OwnerID WHERE ModifiedByID = @ownerid
  DELETE FROM Subscriptions WHERE OwnerID = @ownerid
  DELETE FROM Schedule WHERE CreatedById = @ownerid 
  DELETE FROM PolicyUserRole WHERE UserID = @ownerid
  DELETE FROM Users WHERE UserID = @ownerid

COMMIT

将替换为要删除的用户,仅此而已。但请注意,这也会删除此用户的其他数据。

如果您只想删除权限,可以将用户表中的AuthType标志设置为0。尽管此代码可能会解决此问题,但一个好的答案还应该解释代码的作用以及它的帮助方式。
select UserID, u.UserName
into #rs_users
from
    ReportServer.dbo.Users as u 
where userid = 1 -- expression

delete from [ReportServer].[dbo].[PolicyUserRole]
where UserID in (select UserID from #rs_users)

declare @user_name nvarchar(100), @pattern_start nvarchar(300), @pattern_end nvarchar(100), @result nvarchar(max)
declare @start_position int, @end_position int, @sec_data_id uniqueidentifier

DECLARE user_cursor CURSOR
FOR 
select UserName 
from #rs_users

OPEN user_cursor;
FETCH NEXT FROM user_cursor INTO @user_name
WHILE @@FETCH_STATUS = 0
BEGIN
    set @pattern_start = '<Policy><GroupUserName>' + @user_name + '</GroupUserName><GroupUserId>'
    set @pattern_end   = '</Policy>'

    DECLARE secdata_cursor CURSOR
    FOR 
        select SecDataID 
        from 
            [ReportServer].[dbo].SecData as sec
        where 
            sec.XmlDescription like '%' + @pattern_start + '%' 

    OPEN secdata_cursor;

    FETCH NEXT FROM secdata_cursor INTO @sec_data_id
    WHILE @@FETCH_STATUS = 0
    BEGIN

        select 
            @start_position = PATINDEX ( '%' + @pattern_start + '%' , XmlDescription ) ,
            @end_position = CHARINDEX(@pattern_end, cast(XmlDescription as nvarchar(max)), @start_position),
            @result = SUBSTRING ( XmlDescription , @start_position , @end_position+len(@pattern_end)-@start_position )  
        from [ReportServer].[dbo].SecData as sec
        where SecDataID=@sec_data_id

        -- replace user to empty
        if @start_position > 0 and @end_position > 0 and len(@result) > 0
        begin
            update [ReportServer].[dbo].SecData
            set XmlDescription = replace(cast(XmlDescription as nvarchar(max)),@result,'')
            where SecDataID=@sec_data_id
        end

        FETCH NEXT FROM secdata_cursor INTO @sec_data_id
    END;

    CLOSE secdata_cursor;
    DEALLOCATE secdata_cursor;

    FETCH NEXT FROM user_cursor INTO @user_name
END;

CLOSE user_cursor;
DEALLOCATE user_cursor;