none
請教帳號移轉時,原本Login所對應的DB及角色是否能動態產生 RRS feed

  • 問題

  • 各位好

    目前需要模擬一個狀況,就是將A Server上的DB1,還原至B Server,也取名為DB1 (B Server會修改host name及instance name為 A Server,確保前端AP能正常work)
    先只針對帳號的部分討論:
    假設A server 有5個DB 有10個login(windows及sql),網路上有很多文章在討論帳號移轉,含密碼(利用DTS,TSQL...等等)
    目前情況已經可以將用語法,將這些在A Server上的Account轉移到B server上,(連密碼也成功轉移過來)

    但這10個login 原本在 A Server上對應的db及角色...有辦法用語法倒回來嗎?
    比戶說     loginA--->在DB1是db_owner
                  loginB--->在DB2是db_reader

    因為現在帳號,密碼都可以成功移轉過來,但發現其對應的DB及角色,並沒有跟著過來
    因此想問一下是否有語法能產生原Server A上所有Login對應DB及角色
    也就是底下這段Script,能否動態產生,或是有其他方法可以達到同樣效果??
    還是沒辦法得手動處理??
    謝謝各位的指點

    CREATE USER [test] FOR LOGIN [test]
    GO
    USE [xxxxx]
    GO
    EXEC sp_addrolemember N'db_owner', N'test'
    GO

    註:A Server 及 B Server 都是SQL Server 2000 SP4
    2009年10月29日 上午 08:36

解答

  • Hi ricoisme

        謝謝您的回覆,我剛才先測試Script的方式(不是用web service那一種)
        結果它針對我所提的,會產生其中這一段
     
        IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = N'test')
        BEGIN
                         IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = N'test' AND issqlrole = 1)
                         EXEC dbo.sp_addrole @rolename = N'test'

        END
        GO

        發現這樣的語法是會新增在DB Level下的"角色"裡,而非原本預期的"使用者"裡
        後續我試著用Profier,新增一個使用者時,並給予db_owner 權限,會產生底下這樣的語法

        exec sp_grantdbaccess N'Test', N'Test'
        exec sp_addrolemember N'db_owner', N'Test'

        實際執行這二句,的確就是我需要的,不過差別只是理想是需動態找出原本DB,所有使用者及其對應角色
        我會再研究一下,在還沒動態產生前,其實若帳號不多,先手動準備好剛那二句其實也是負擔也是還好
        總之,謝謝您的協助

    2009年10月30日 上午 02:52

所有回覆

  • hi
    這軟體應該可以幫助你

    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年10月29日 下午 12:17
    版主
  • Hi ricoisme

        謝謝您的回覆,我剛才先測試Script的方式(不是用web service那一種)
        結果它針對我所提的,會產生其中這一段
     
        IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = N'test')
        BEGIN
                         IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = N'test' AND issqlrole = 1)
                         EXEC dbo.sp_addrole @rolename = N'test'

        END
        GO

        發現這樣的語法是會新增在DB Level下的"角色"裡,而非原本預期的"使用者"裡
        後續我試著用Profier,新增一個使用者時,並給予db_owner 權限,會產生底下這樣的語法

        exec sp_grantdbaccess N'Test', N'Test'
        exec sp_addrolemember N'db_owner', N'Test'

        實際執行這二句,的確就是我需要的,不過差別只是理想是需動態找出原本DB,所有使用者及其對應角色
        我會再研究一下,在還沒動態產生前,其實若帳號不多,先手動準備好剛那二句其實也是負擔也是還好
        總之,謝謝您的協助

    2009年10月30日 上午 02:52