如何在用户名更改后更新 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
语句。检查回滚事务以首先进行测试。您还需要 UPDATE
对 dbo.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 就成功了。
我的用户名已从 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
语句。检查回滚事务以首先进行测试。您还需要 UPDATE
对 dbo.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 就成功了。