1

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

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

发送邮件失败:无法识别用户或组名“ABCDE\jdoe”。邮件不会被重新发送。

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

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

4

3 回答 3

0

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

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

这个脚本应该做的工作:

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

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

于 2020-09-08T11:08:16.347 回答
0

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

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
于 2018-08-15T00:53:27.607 回答
0

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

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

于 2020-10-23T21:11:08.280 回答