Reporting services 如何使用TSQL删除SSRS中的用户
我想删除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
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;