【问题标题】:How to update the SSRS Users table after a username change?用户名更改后如何更新 SSRS 用户表?
【发布时间】:2019-01-15 02:09:21
【问题描述】:

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

但是,使用我的新用户名john.doe,订阅无法运行并引发错误:

发送邮件失败:用户或组名 'ABCDE\jdoe' 不是 已识别。邮件不会被重新发送。

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

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

【问题讨论】:

    标签: sql-server tsql reporting-services reportserver


    【解决方案1】:

    我会为此使用MERGE 声明。在回滚时检查事务以首先进行测试。您还需要对dbo.Users 表具有UPDATE 权限。

    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
    

    【讨论】:

    • 我采取了更简单的方法来试一试:我转到“安全”文件夹和“用户”并尝试重命名我当前的登录名。它成功了!所有错误都已停止,并且没有其他问题变得明显。我会把代码放在手边,以防万一!
    【解决方案2】:

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

    但是,将 SQL Server 的安全用户名从 DOMAIN/OldName 重命名为 DOMAIN/NewName 就可以了。

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多