MSDE FunClub
Microsoft Data Engine FunClub
MSDE初心者向けメーリングリスト過去ログ[1034]番
 
[TOP]>[MSDE初心者向けメーリングリスト過去ログ(1034番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
Re: MSDE7から MSDE2000 へアップした際、 MSDE7 のユーザでログインできない

Date: Fri, 30 Jan 2004 18:05:59 +0900
From: 西山 和昭 <who@example.co.jp>


早速のご教授ありがとう御座います。

> 
> 今回の原因とは関係がありませんが、データベースファイルの
> コピーなどをするときは、明示的にデタッチした後に、取り出す
> ようにして下さい。
> 
> データベースサービスを止めた後に(電源を落とす)、データベース
> ファイルをコピーしても、これはデタッチ扱いにはなりません。
> 
> デタッチは、データファイルの中に、書き込み未完了が存在しない
> ことを保証します。
> このため、場合によっては、トランザクションログファイルが存在
> しない状態でも、データベースを復元できるメリットがあります。
> ただしこれには条件があって、トランザクションログファイルは
> 1個から構成されること。
> #詳細は、2月20日のPASSJカンファレンスで触れる予定です。
> http://www.sqlpassj.org/conf2004/session.aspx
> 
> 
> データベースサービスを停止した後に取り出したファイルを使って
> 組み込むような場合は、トランザクションログファイルが必要です。
> データファイルに対する書き込み未完了部分は、トランザクション
> ログファイルから復元されます。
> 
> このような高信頼性機構が働くため、データファイルへの書き込みは
> オンメモリ上でキャッシュされ、データアクセスを高速化するのに
> 役立っているわけです。


ご指摘ありがとう御座います。


> さて、ご質問の内容ですが、
> 
> (1)MSDE7のデータファイルをMSDE2000に組み込んだ
> (2)データベースユーザに対応するログイン名が作成していなかったので、
> 新しくログインを登録した
> (3)ところがデータベースユーザとして、そのデータベースが使えない
> 
> という状況が起きているという意味でしょうか?


その通りです。


> 
> データベースユーザとログイン名の概念が部分的に混乱しているようなので
> 上記の場合についてアドバイスします。
> 
> まず、ログイン名の情報はmasterデータベースのsysxloginsシステムテーブル
> で管理されます(SQLServer2000)。
> 一方、データベースユーサは、個別データベースの中の、sysusers システム
> テーブルで管理されます。
> 
> データベースだけの移動ですから、データベースユーザ情報は移動されるのに、
> masterデータベースのログイン情報は移動されませんでした。
> 
> このため、データベースユーザに対応するログイン名が、未対応になります。
> 
> そこで新しく、元と同じ名前のログイン名を作成したとします。
> 同じ名前だから大丈夫かと思いますが、内部的には名前ではなく、
> SID(セキュリティ識別子)で管理されます。
> 
> 元の名前と同じでも、SIDが異なると、別物扱いにされます。
> 
> データベースユーザを管理する sysusersテーブルでは、ログイン名に対応する
> SIDを覚えています。
> 
> そこで新しくログインを登録するときは、SIDを指定して登録します。
> 
> sp_addlogin [ @loginame = ] 'login'
>     [ , [ @passwd = ] 'password' ]
>     [ , [ @defdb = ] 'database' ]
>     [ , [ @deflanguage = ] 'language' ]
>     [ , [ @sid = ] sid ]
>     [ , [ @encryptopt = ] 'encryption_option' 
> 
> パラメータの5番目を指定します。
> 
> 
> 具体的には次のように、現在のデータベースユーザに対応するSID値を
> 探します。
> SQLServerログインに関しての場合です。
> 
> select  sysusers.sid               as 個別DB側SIDの値,
>         sysusers.name              as データベースユーザ名,
>         master.dbo.sysxlogins.sid  as システム上のSIDの値,
>         master.dbo.sysxlogins.name as ログイン名
>   from sysusers
>    left outer join master.dbo.sysxlogins
>        on sysusers.sid = master.dbo.sysxlogins.sid
>   where (
>            sysusers.issqluser=1
>      and 
>            sysusers.name<>'guest'
>    )
> 
> 上記を実行すると、データベース側で記憶しているSID値がわかります。
> また、対応が取れていないシステム側のSID値がNULLと表示されます。
> 
> システム側SID値がNULLになっているところの、データベース側SIDを
> 控えておきます。
> 
> 例えば、
>                        0x9DFDADFF65E38C4E975B5B361EF3C722
> のような値でしょう。
> 
> 
> 次に、対応が取れていないログインを削除します。
>       exec sp_droplogin  'ログイン名'
> 
> もう1度、新しくログインを登録し直します。その時、SID値を指定します。
>   exec  sp_addlogin
>                'ログイン名'  ,
>              'パスワード' ,
>                 '既定のDBの名前' ,
>                null,
>               0x9DFDADFF65E38C4E975B5B361EF3C722
> 
> 以上で、対応関係が復活します。
> 
> 
> データベースを移動するときは、masterデータベースのログイン情報が
> どうなっているか考えて移動するようにしましょう。
> 
> 通常は、DTSなどを使って、ログイン情報も転送します。
> 

詳細な説明をありがとう御座います。
頑張ってみます。




[MSDE/SQLServerに関して、今、どんなことにお困りですか?]
よろしければお困りの内容を、電子メールで教えて下さい。
質問を電子メールで作成する


[ウィンドを閉じる]

[MSDE/SQLServer FAQ ]

[MSDE / MSDE2000 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。