SSRS-用户表(用户名更改)

时间:2018-08-07 22:01:47

标签: sql-server tsql reporting-services reportserver

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

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

  

发送邮件失败:用户或组名“ ABCDE \ jdoe”不是   已确认。邮件将不会被重新发送。

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

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

在此先感谢您提供的帮助!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我设法通过以下步骤解决了这个问题:

  1. 转到SSMS,然后连接到您的SQL Server;
  2. 转到安全->登录;
  3. 使用新用户名重命名旧用户名(只需右键单击它->重命名);
  4. 转到“报表服务器”数据库的“用户”表,并为您的旧用户更新“用户名”列;
  • 此脚本应完成工作:UPDATE [ReportServer].[dbo].[Users] SET UserName='domain\newUser' WHERE UserName='domain\OldUser'
  1. SSRS订阅和其他SSRS功能现在应该可以正常运行;

答案 2 :(得分:0)

我尝试将dbo.Users.UserName重命名为新的DOMAIN / JDoe,但是仍然出现错误。

将SQL Server的安全用户名从DOMAIN / OldName重命名为DOMAIN / NewName可以解决问题。