3

シナリオ:

SQLAzureから取得したbacpacから復元しようとしています。

新しいSQLAzureデータベースインスタンス、またはオンプレミスサーバーのいずれかに。以前の管理ポータルまたはDACフレームワーククライアントサイドツールの場合。

正常に動作しているようで、当然、復元後にSQLユーザーはSQLログインにマップされません。

私が試したこと:

次のようにマップしようとすると、次 alter user MyUser with login = MyLoginのように失敗します。

メッセージ33016、レベル16、状態1、行6ユーザーをログインに再マップすることはできません。再マッピングは、WindowsまたはSQLログインにマッピングされたユーザーに対してのみ実行できます。

実行select * from sys.database_principalsするとユーザーが一覧表示されますが、比較のために作成したSQL認証済みユーザーよりもはるかに長いSIDを使用します。

オンプレミスで実行した場合sp_change_users_login 'Report'、ユーザーはリストされていないため、孤立しているとは検出されません。

オンプレミスでsp_change_users_loginを使用しようとすると、次のように失敗します。

メッセージ15291、レベル16、状態1、プロシージャsp_change_users_login、行114このプロシージャを終了します。ユーザー名「MyUser」が存在しないか無効です。

オンプレミスで、ログインプロパティUIの[ユーザーマッピング]セクションから試してみると、次のようになります。

ユーザー「マイユーザー」の作成に失敗しました。...ユーザー、グループ、またはロール「MyUser」は現在のデータベースにすでに存在します。

なんらかの理由で復元中に何かが破損した場合に備えて、もう一度やり直してみましたが、同じ結果になりました。

質問:

これらのSQLユーザーを再マップするにはどうすればよいですか?

それらを最初から再作成する必要がなく、データベース内のスキーマオブジェクトとの関係を避けたいですか?

いくつかの追加情報:

私がSQLAzureユーザーに見ているものとよく似ているSQLユーザーの1つのタイプは、

create user AnotherUser without login

これらは、上記で使用した3つのマッピングアプローチすべてでまったく同じように失敗します。これは、通常のSQLユーザーのどのアプローチにも当てはまりません。さらに、sidも長く、同じ「0x010500000000000903000000」で始まります

4

3 に答える 3

1

sqlmattersの記事はそれを説明しています

ログインのないユーザーは、関連付けられたログインなしで意図的に設定された特別なタイプのユーザーです。

SIDを調べることで、そのような場合かどうかを確認できます。

 -- SQL to run to identify users without login :
SELECT CASE WHEN DATALENGTH(sid) = 28
             AND type = 'S'       -- only want SQL users
             AND principal_id > 4 -- ignore built in users
     THEN 1 ELSE 0 END AS is_user_without_login,*
FROM sys.database_principals 

ログインしていないユーザーは、通常の(孤立した)ユーザーよりも長いSIDを持っています。

これらの特別なユーザーは、そのように作成されているため、ログインにマップできません。誰かが故意にまたは誤ってユーザーを作成したに違いありませんWITHOUT LOGIN

于 2018-07-20T12:47:39.293 に答える
0

それが発生した場合は、バックアップが破損している可能性があります。リンクされたオンプレミスのシナリオと同様に、動作はどこからともなく発生し、破損したバックアップにトレースされました。

私の場合も同じでした。質問を投稿する直前の最後の試みは、データベースの別のバックアップで、問題なく機能しました。

于 2012-01-02T21:53:53.490 に答える
0

次の方法でログインにマップできるユーザーを見つけることもできます。

SELECT *
FROM sys.database_principals
WHERE 1=1
    AND [type] = 'S'
    AND [name] NOT IN ('dbo','guest','INFORMATION_SCHEMA','sys')
    AND authentication_type_desc IN ('WINDOWS','INSTANCE')
于 2019-10-13T22:06:03.783 に答える