問題タブ [database-permissions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server-2005 - ビューのみに権限を付与する
データベースに 1 人のユーザーがいて、1 つのビューのみを読み取り、それ以上、テーブル、何も読み取れないアクセス許可を彼に付与したいと考えています。
これどうやってするの?
どうもありがとう。
PS: MS SQL Server 2005 を使用しています
c# - データを追加するための SQL アクセス許可と確認方法は?
C# アプリと SQL Server 2005 でデータベースにデータを追加できるユーザーのアクセス許可を維持するための良い方法を探しています。
これを明確にするために説明する必要があります。それでは、これの例を見てみましょう:
私には と の 2 人のユーザーがいBob
てJim
、どちらも SQL パーミッションに追加されているため、データベースへの書き込みアクセス権があります。現在、すべてのアクセスはドメイン ユーザー アカウントに基づいています。他のすべてのユーザーには、読み取りアクセスのみがあります。
現在、次のようなテーブルがいくつかあります。
- ユーザー
- ユーザー権限
- 書籍
- 書籍出版社
したがってUserPermissions
、Users と BookPublishers のリストが含まれます。たとえば、 にはBob
の本を追加する権限があり、 には の本をMS Press
追加Jim
する権限がありO'Reilly
ます。
次に、この情報を確認し、追加できるものを制限する必要があります。
それでJim
、コマンドラインから私のアプリケーションを使用し、彼は次のようなものを書いているとしましょう:
Addbook.exe "C# 3.0 in a Nutshell" "O'Reilly"
ツールは先に進み、本を book テーブルに追加する必要があります。
今Bob
、同じコマンドを試してみると、彼は によって書籍を追加する権限がないため、ツールはエラーになるはずO'Reilly
です。
今、私はいくつかのことを行う方法を知る必要があります。
- ユーザーが最初に SQL Server への書き込み権限を持っていることを確認する
books
ユーザーが特定のパブリッシャーによって追加するための書き込み権限を持っていることを確認します- また、ツールが実際にデータを追加しようとする前に、上記が正しいことを確認する必要があります。つまり、ツールが続行する前に、まず確認のフィードバックが必要です。
今は、ユーザーが悪意のあるデータを挿入することを 100% 心配しているわけではありませんが、それを止めればいいのですが、これは内部ツールであり、ユーザーを信頼できると思います... (おそらく)
いずれにせよ、どこから始めればよいかわかりません。私の SQL スキルは非常に不足しています。
Akk、最後にもう 1 つ、ストア プロシージャを使用してデータを追加したくありません。
asp.net - asp.netメンバーシップに必要なSQLサーバーの最小アクセスレベルはどれくらいですか?
セキュリティ上の理由から、asp.netメンバーシップユーザーが持つことができる最小アクセスレベルはどれくらいですか?
sql-server - データベース権限の構造
私の雇用者アプリケーションの多くは、データを特定のユーザーまたはグループのセットに制限するための同様の内部許可構造を共有しています。グループは入れ子にすることもできます。
このアプローチで現在直面している問題は、アクセス許可の列挙が非常に遅いことです。現在の方法では、多くのカーソルと一時テーブルを持つストアド プロシージャを使用しています。これは小規模なアプリケーションでは問題なく機能しましたが、現在、急速に成長している特定のシステムが 1 つあり、速度が低下し始めています。
基本的なテーブル構造は次のとおりです。
tblUser { ユーザー ID、ユーザー名、WindowsLogonName }
tblGroup {グループID、名前、説明、システムフラグ}
tblGroupGroup { GroupGroupID, 名前, }
tblGroupUser { GroupUserID, 名前, }
そしてそれをすべて結びつけます。
tblPermission { PermissionID、SecurityObjectID、SecuredID、TableName、AllowFlag }
..のような行が含まれています
'5255-5152-1234-5678', '{グループの ID}', '{tblJob 内の何かの ID}', 'tblJob', 1
'4240-7678-5435-8774', '{ユーザーの ID}', '{tblJob 内の何かの ID}', 'tblJob', 1
'5434-2424-5244-5678', '{グループの ID}', '{tblTask 内の何かの ID}', 'tblTask', 0
すべてのグループを列挙し、保護された行の ID を取得するためのより効率的な方法が必要ではないでしょうか?
事態をさらに複雑にします。ユーザーが行へのアクセスを明示的に拒否されている場合、これはすべてのグループ権限を無効にします。これはすべて MSSQL にあります。
database - それぞれに 1 つのスキーマを持つ複数のデータベースを使用するのと、複数のスキーマを持つ 1 つのデータベースを使用するのとではどちらが良いですか?
私の質問の 1 つに対するこのコメントの後、X スキーマで 1 つのデータベースを使用する方が良いか、またはその逆かを考えています。
私は、人々が登録するときに (実際には) データベースを作成する Web アプリケーションを開発しています (いいえ、それはソーシャル ネットワークではありません。誰もが自分のデータにアクセスでき、他のユーザーのデータを見ることはありません)。これは、以前のバージョンのアプリケーション (まだ MySQL で実行されている) で使用した方法です。登録ごとに、Plesk API を使用して、次のことを行います。
- 権限が制限されたデータベース ユーザーを作成します。
- 前回作成したユーザーとスーパーユーザーだけがアクセスできるデータベースを作成する(メンテナンス用)
- データベースにデータを入力する
今度は、PostgreSQL で同じことを行う必要があります (プロジェクトは成熟しつつあり、MySQL はすべてのニーズを満たしていません)。すべてのデータベース/スキーマのバックアップを独立させる必要があります。pg_dump
両方の方法で完全に機能し、1 つのスキーマまたは 1 つのデータベースのみにアクセスするように構成できるユーザーに対しても同じです。
では、あなたが私よりも経験豊富な PostgreSQL ユーザーであると仮定すると、私の状況に最適なソリューションは何だと思いますか? またその理由は? $x スキーマの代わりに $x データベースを使用すると、パフォーマンスに違いはありますか? また、将来維持するのに適したソリューションはどれですか (信頼性)? すべてのデータベース/スキーマは常に同じ構造になります!
バックアップの問題 (pg_dump を使用) については、1 つのデータベースと多くのスキーマを使用して、すべてのスキーマを一度にダンプする方がよいかもしれません: 回復は非常に簡単で、メイン ダンプを開発マシンにロードしてから、必要なスキーマだけをダンプして復元します。は 1 つの追加ステップですが、すべてのスキーマをダンプする方が、1 つずつダンプするよりも高速に思えます。
2012年更新
アプリケーションの構造とデザインは、この 2 年間で大きく変化しました。私はまだ「多くのスキーマを持つ1つのデータベース」アプローチを使用していますが、それでも、アプリケーションのバージョンごとに1つのデータベースがあります。
バックアップについては、各データベースを定期的にダンプしてから、バックアップを開発サーバーに移動しています。PITR/WAL バックアップも使用していますが、前に述べたように、すべてのデータベースを一度に復元する必要はほとんどありません。したがって、今年はおそらく却下されるでしょう(私の状況では、最善のアプローチではありません)。
アプリケーション構造が完全に変更されたとしても、1 db 多スキーマ アプローチは今では非常にうまく機能しています。私はほとんど忘れていました: すべてのデータベース/スキーマは常に同じ構造を持ちます! 現在、すべてのスキーマには独自の構造があり、ユーザーのデータ フローに動的に反応して変化します。
oracle - Oracleオブジェクトに対してEXECUTE権限が付与されているスキーマを確認するにはどうすればよいですか?
Oracle 10g db(この場合はパッケージ)内の特定のオブジェクトに対する実行権限がすでに付与されているスキーマを確認する必要があります。これを行うための最も簡単な方法は何ですか?この情報を提供する組み込み関数はありますか?
asp.net - ASP.NET および SQL Server 2008 でのエラー "ユーザー 'NT AUTHORITY\IUSR' のログインに失敗しました"
私の ASP.NET v3.5 Web アプリケーションは、SQL Server 2008 データベースへの接続を開こうとすると、次の例外をスローします。
System.Data.SqlClient.SqlException: ログインによって要求されたデータベース "MyDbName" を開けません。ログインに失敗しました。ユーザー 'NT AUTHORITY\IUSR' のログインに失敗しました。
NT AUTHORITY\IUSR
問題は、サーバーのログイン リストとデータベースのユーザー リストに追加したことです。サーバーについては、ユーザーにパブリック ロールを付与し、データベースについてはdb_datareader
アクセス許可を付与しました。
NT AUTHORITY\NETWORK SERVICE
アプリケーション プールが実行されている ID である にも同じ権限を付与しました。
それが違いを生む場合、Web アプリケーションは IIS7 によってホストされます。DB と IIS が同じ物理マシン上にある場合にも、問題が再現されます。
database - Oracle DBA権限には「CREATE ANY TABLE」ロールが含まれていますか?
ユーザーから同じDBの下の任意のユーザーへのテーブルを作成するだけです。3 つのスキーマを考えてみましょう。
スキーマ 1、スキーマ 2、およびスキーマ 3。
スキーマ 1 には DBA 特権がありました。
Schema_1 から SChema_2 または Schema_3 にテーブルを作成することはできますか????
または、このロールに「CREATE ANY TABLE」も付与する必要がありますか??
c# - SQLデータベースの権限を設定する方法は?
xpproを使用してコンピューターでiis5.1を使用してasp.netWebサイトをホストしようとしています。
私はiisでWindows認証を使用しています。サイトのフォルダー権限は、認証されたユーザーを許可するように設定されています。web.configファイルでImpersenationがtrueに設定されています。
このWebサイトは、VWD Express 08を介してアクセスすると正常に機能するローカルデータベースを使用します。しかし、インターネット経由でアクセスしようとすると、次のエラーが発生します。
「ユーザーには、このアクションを実行する権限がありません。」
IISのWindows認証によって認証されたユーザーがデータベースにアクセスしたり、すべてのユーザーにデータベースアクセスを設定したりできるようにするにはどうすればよいですか?
sql-server - LinqToSqlに対してSQLServerユーザーに付与する必要があるアクセス許可は何ですか?
LinqToSQLと信頼できる接続を使用して、データベースの選択/更新/挿入/削除を処理しています。これまで、私は常にストアドプロシージャを使用し、データベース内の特定のsprocのアプリケーションプールIDに実行権限のみを付与していました。これは私の最初のLinqToSqlプロジェクトです(そして私はそれがどれほど役立つか本当に大好きです)。LinqToSqlを機能させるために、アプリケーションプールIDへのdboアクセスを許可したくない(ただし、それが推奨される場合は、気にしない)。LinqToSqlが最小限のアクセス許可を持つように、アプリケーションプールIDにどのような種類のアクセス許可を付与できますか?それとも、dbo権限を使用して、それで済ませる必要がありますか?
KristoferAの回答によると、これはデータベース内のアプリケーションプールIDに付与したアクセス許可です。
EXEC sp_addrolemember 'db_datareader', 'app_pool_identity'
EXEC sp_addrolemember 'db_datawriter', 'app_pool_identity'
必要なsprocに実行権限を付与するだけのセキュリティとはまったく同じレベルではありませんが、Linq2SQLを使用するだけで達成した開発の大幅な向上を考えると、非常に優れています。そして、完全なdboアクセスを許可するよりも優れています。