1

Integrated Security=Noユーザーとパスワードを指定してから指定する接続文字列を介して、コードでSQLServerに接続するときにSQLServerログインがどのように使用されるかを把握しようとしています。

指定しているユーザーを意味するのではなく(もちろんそれは知っています)、ユーザーがマップするログインを意味することに注意してください。SQL Serverでのログインとユーザーについて読んでいますが、接続するには常にログインが必要であり、データベースごとにログインがアクセスする必要があるという点があります。そのため、SSMSで、関心のあるデータベースで常に指定しているユーザーにマップするログインを探していますが、そのようなログインは表示されません。

Fyi、私が尋ねている理由は、このデータベースに対して新しいレガシーアプリを許可する必要があり、アプリはSQLServer認証を使用するようにコーディングされているためです。必要なデータベースにユーザーが必要なだけなのか、それともログインを作成する必要があるのか​​を判断しようとしています。しかし今、私は一般的な質問自体に興味を持っています。

編集-sysloginsのクイッククエリは2つのログインのみを表示します。したがって、SQLSはユーザーごとに1つのログインを維持しているが、SSMSはそれらを隠しているという私の理論は、そうではないようです。

編集-sysloginsまたはsys.server_principalsのクエリは、誤解を招くように見えます。2つの異なるSQLS(Winではない)ログインがあるデータベースで、それぞれとしてログインし、sys.server_principalsから*を選択しました。2つの異なる答え:saとログインを取得するたびにログインしました。明らかにそこにありましたが、「その他」のログインは表示されませんでした。これはスキーマと関係があるのではないかと思いますが、私もほとんど知りません。いずれにせよ、一般的に、ログインは実際にはすべてのユーザーに存在すると思いますが、SSMSに1つのログインとして接続すると、これらのログインのすべてが表示されるわけではありません。これは正しいですか?

解決済み(一種) 私がsaを持っているデータベースで遊んでみると、SSMSは、あなたがsaであるか、おそらくその特定の権限を持っている場合にのみ、すべてのログインを表示することは明らかです。そうしないと、ログインの表示が制限されます。したがって、期待していたログインが表示されなかった理由については、本当の謎はありません。どうやらSSMSはそれらを隠しています。私はこれを文書化するものに出くわしたことがないので、「ある種の」と「どうやら」と言います。それは単なる観察です。

皆様のご協力に感謝いたします。

4

2 に答える 2

4

包含データベースに接続している場合を除き、これはサーバー レベルのログインです。サーバーレベルのログインがマップされるデータベースユーザーを意味する場合は、次を使用して確認できます。

SELECT u.name 
FROM sys.server_principals AS l
INNER JOIN sys.database_principals AS u
ON l.sid = u.sid
WHERE l.name = 'user id in your connection string';

If you are not using a contained database, this is how you would provision your user:

USE master;
GO
CREATE LOGIN your_login_name 
  WITH PASSWORD = 'f00b@r!', CHECK_POLICY = OFF;
GO
USE your_database;
GO
CREATE USER your_login_name -- doesn't have to match, but should for sanity
  FROM LOGIN [your_login_name];
GO
-- then apply permissions of course.
于 2013-01-24T18:07:01.943 に答える
1

通常、ログインはデータベース ユーザーにマップされます

たとえば、何らかの不幸な状況により、アプリがデータベース所有者のアクセスを予期した場合

このログインをサーバーに作成し (まだ存在しない場合)、問題のデータベースの dbo ユーザーにマップします。

組み込みのユーザーでない場合は、このレガシー アプリが既にアクセスできるデータベースを調べ、どのユーザーにマップされているかを調べる必要があります。新しい DB にそのユーザーを作成し、必要な権限ロールを設定します。次にマップします。それへのログイン。

SQL Server のバージョンには微妙な違いがあるため、段階を追って説明するのは困難です。

アプリのログイン マップがカスタム ユーザーである場合は、新しいデータベースで同等のユーザーを見つけ出す必要があります。ただし、同じ名前である必要はありません (アプリがそれを使用している場合を除く)。さらに多くの権限を持つこともできます。

于 2013-01-24T18:24:13.947 に答える