2011-08-03 11 views
0

私はMSSQL 2008 R2を使用しています。私はそれが復元されると、SQL Management Studioから誰もがアクセスできる特定のデータベースを持っています。以下のSQLステートメントを使用して、パブリックサーバーロールにこのデータベースの接続許可が与えられていることを確認しました。パブリックロールからの接続許可を取り消します

use db_mydb 
SELECT * 
    FROM sys.database_permissions 
WHERE grantee_principal_id = (SELECT principal_id 
           FROM sys.server_principals 
           WHERE name ='public') 

このクエリの結果は以下の

0 DATABASE 0 0 2 1 CO CONNECT G GRANT

された状態で、この許可を取り消すために周りのすべての作業はありますか?正しい方法の

答えて

0

このため私の溶液であった間には共通の列が存在しません空のデータベースを作成します。その後、スクリプトの生成を使用して、テーブル、ビュー、およびストアドプロシージャをスクリプト化します。そして、インポートデータオプションを使用してデータをインポートします。これらのすべては、Micosoft SQL Management Studioのみを使用して行うことができます。

+0

つまり、両方のサーバーで*のログイン*が設定されていて、ユーザーも存在していたことを意味します。復元時には、セキュリティは自動的に許可されました。私が言及したように、公衆と何の関係もありません。 2つのsys.xxx_principalsビューのsidカラムを使用しているものを確認できます – gbn

+0

データベースにはユーザが1人もいません –

0

一つは、データベース

  • 実行中のすべてのユーザーがそれらのユーザーに接続を拒否

    • 実行のDROP USER

    公共

    で台無しにしないだろうあなたのコードもあなたを誤解しています:

    • サーバレベル公的役割は、データベースレベル
    • sys.database_permissions.grantee_principal_id役割についてsys.database_principals
    • を指すパブリック役割とは無関係であり、sys.database_permissions/sys.database_principalssys.server_principals
  • +0

    あなたのポストに感謝します。私の問題は、この特定のデータベースにはアクセスしたユーザーがいないが、アクセスできることです。したがって、私は何かをすることはできません 'use db_test; TestUserに接続することを拒否; 実際に私は自分のコードで誤解を受けた。もっとよく見えるはずだったと思ってください。 'use db_test; select * from sys.database_permissionsここで、grantee_principal_id = (sys.database_principalsからname = 'public')のSELECT principal_id ;; –

    +0

    私はpublicロールを混乱させるつもりはありません。それは、SQL 2000からSQL 2008に移行する前に既に変更されているようで、「デフォルト」のアクセス許可を復元することです。 –

    +0

    「デフォルト」権限はありません。接続しているユーザーはsysadminでなければなりません。すでにアクセスしている場合(例えば、グループ/ログインが古いサーバーと新しいサーバーにある場合) – gbn

    関連する問題