如何在用户名更改后更新 SSRS 用户 table?

How to update the SSRS Users table after a username change?

我的用户名已从 jdoe 更改为 john.doe(例如)。 [dbo].[Users] table 中的引用显示我的旧用户名,jdoe

但是,使用我的新用户名 john.doe,订阅失败 运行 并抛出错误:

Failure sending mail: The user or group name 'ABCDE\jdoe' is not recognized.Mail will not be resent.

[dbo].[Subscriptions].[OwnerID] 值引用了 jdoe 的 [dbo].[Users].[UserID]

我可以简单地将 [dbo].[Users].[UserName] 值更改为我的新用户名,同时保留 [dbo].[Users].[UserID][dbo].[Users].[Sid] 列吗?

我会为此使用 MERGE 语句。检查回滚事务以首先进行测试。您还需要 UPDATEdbo.Users table 的许可。

SET XACT_ABORT ON
BEGIN TRANSACTION;

;WITH 
users_list
AS 
(
    SELECT users_list.* FROM (VALUES
          ('DOMAIN\OldUser1', 'DOMAIN\New.User1')
        , ('DOMAIN\OldUser2', 'DOMAIN\New.User2')
    ) users_list ([UserName], [NewUserName]) 
)
, 
users_source -- don't add users that already exist to prevent duplicates
AS 
(
    SELECT 
          [UserName]
        , [NewUserName]
    FROM
        users_list 
    WHERE 
        1=1
        AND [NewUserName] NOT IN(SELECT [UserName] FROM [ReportServer].[dbo].[Users])
)
MERGE [ReportServer].[dbo].[Users] AS T
USING users_source AS S
ON T.[UserName] = S.[UserName]
WHEN MATCHED
THEN UPDATE SET
  T.[UserName] = S.[NewUserName]
OUTPUT @@SERVERNAME AS [Server Name], DB_NAME() AS [Database Name], $action, inserted.*, deleted.*;

ROLLBACK TRANSACTION;
--COMMIT TRANSACTION;

GO

在您的 SQL 服务器上,转到安全 -> 登录。然后,用新用户名重命名旧用户名(只需右键单击它并select“重命名”)。

接下来,转到“报表服务器”数据库,select“用户”table,并更新旧用户的“用户名”列。

这个脚本应该可以完成工作:

UPDATE [ReportServer].[dbo].[Users] SET UserName='domain\newUser' WHERE UserName='domain\OldUser'

SSRS 订阅和其他 SSRS 功能现在应该可以正常工作。

我已经尝试将 dbo.Users.UserName 重命名为新的 DOMAIN/JDoe,但仍然会产生错误。

但是,将 SQL 服务器的安全用户名从 DOMAIN/OldName 重命名为 DOMAIN/NewName 就成功了。