
SQL Server2008でDBを管理しているのですが、
エンドユーザーに与える権限に付いて教えて下さい。
ACCESS ADPから接続してデータの登録、更新、削除を行ないます。
現在、ログインでsysadminをチェックしないと上記の作業が出来ません。
データベースユーザー全てのロールをチェックしてもログインで
sysadminがチェックしてないと動作しません。
エンドユーザーのログインではsysadminをチェックしない方がいいと
考えるのですが、その場合各データベースのセキュリティはどのように
設定したらいいのでしょうか?
No.1ベストアンサー
- 回答日時:
>データベースユーザー全てのロールをチェックしてもログインで
sysadminがチェックしてないと動作しません。
全部?全部ってdenydatareaderもですか?それは動作しないです。
(GRANTよりDENYが優先されます)
テーブル・ビューの参照・更新しか行わないのであれば、public/datareader/datawriterだけつけるのがよいでしょう。
この場合、ストアドプロシージャの実行はできませんのでストアドプロシージャ単位に個別にEXECUTE権限を付与することになります。
それの管理が面倒くさくてdb_ownerを付与するケースもままあります。
いずれもしてもsysadminは必要ありません。
いつもありがとうございます。
やはり、ストアド単位は面倒なので、db_ownerだけを付与したのですが、
テーブルへのアクセスは可能でしたが、ストアドは動きませんでした。
Manegement Studio からストアドを見ることは出来ますが、アプリから
ストアドを起動すると「オブジェクトにアクセスできません」と云った
趣旨のメッセージが表示されます。
ログインでpublic、DBユーザーでdb_ownerにチェックしました。
アプリからアクセスするには他にも必要でしょうか?
No.4
- 回答日時:
メッセージはSQL Serverが出しているものです。
エンドユーザのログインがuser1であるとして、
・user1が「勤怠_DB」においてdb_ownerである
・「SP_労務明細表」に対するEXECUTE権限を明示的にdenyしていない
(denyしていれば2番のコメントのところで実行した2つ目のクエリに出てきます)
・user1でSSMSにログインし、上記ストアドを手動実行すると実行できる
という理解なので、実行が拒否される理由が正直わからないです。
(こちらでは、いただいたソースでいろいろ試しても再現できませんので。。)
で、user1にsysadminを付けるとExcelファイルに出力できるわけですか?
>どうもファイルへの出力が出来ないようです。
SQL Server自身がデータベース外のリソース(ファイル等)にアクセスするためには、確かにsysadminが必要ですが、メッセージは、そもそもこのストアドの実行権限がないと言っています。
(Excel出力のVBAを実行すると、SQL Serverが行うのは「EXEC SP_労務明細表 'xxxx','xxxx','xxxx'」だけであって、ファイル出力はアクセスが行います)
>そのモジュールを使っている命令やコンボボックスの、ソースにストアドを指定してある部分はストアドも動作しています。
のように、まだコミュニケーション不足の部分があるんですかね。。
この回答への補足
>どうもファイルへの出力が出来ないようです。
>そのモジュールを使っている命令や・・・ストアドも動作しています。
これは私の勘違いでした、ログインに sysadmin を付けて実行していました。
sysadmin権限が無いとと、アプリからはやはりストアドは実行できませんでした。
SSMSは実行できたはずですが、再度ためしてみます。
ユーザーやログインを削除したりしても試してみます。
ありがとうございました。
No.3
- 回答日時:
権限設定は正しくされているようです。
で、当方Access2003は持ってないので、Access2007/SQL Server 2008で試してみましたが、再現させられませんでした。
したがって、
・Access2003/SQL Server 2008固有の問題である
・何かもっと凝った方法でストアドを呼んでいる(私は単純にリストボックスのソースに指定して試しただけです)
なのかなと思います。
>Manegement Studio からストアドを見ることは出来ますが、アプリから
>ストアドを起動すると「オブジェクトにアクセスできません」と云った
>趣旨のメッセージが表示されます。
このメッセージの内容も正確に知りたいところです。
(ポイントはSQL Server, OLE Provider, Accessのどれが返しているメッセージなのか、です)
この回答への補足
すいません「実際にストアドを実行するモジュール」は必要なかったようです。
また、そのモジュールを使っている命令やコンボボックスの、
ソースにストアドを指定してある部分はストアドも動作しています。
どうもファイルへの出力が出来ないようです。
-------エラーメッセージ-------------------------------------------------------------------
229 : EXECUTE 権限がオブジェクト 'SP_労務明細表'、データベース '勤怠_DB'、スキーマ 'dbo'で
拒否されました。
直下の命令 On Error で メッセージを表示させています。
-------エラーが出ている命令---------------------------------------------------------------
DoCmd.OutputTo acOutputStoredProcedure, "EXEC SP_労務明細表 '" & Me!開始日付_sp & "','" & _
Me!終了日付_sp & "'," & Nz(Me!所属コード_sp, "Null"), acSpreadsheetTypeExcel9, _
"C:\ACCESS\労務明細表_" & Format(Me!開始日付_sp, "yymmdd") & "-" & _
Format(Me!終了日付_sp, "yymmdd") & ".xls"
-------実際にストアドを実行するモジュール-------------------------------------------------
Public Function fncRunSProc(ByVal StrSProc As String, ByVal StrParam As String) As Boolean
On Error GoTo Err
Dim cn As ADODB.Connection
fncRunSProc = False
Set cn = CurrentProject.Connection
If StrParam = "" Then
cn.Execute "EXEC " & StrSProc
Else
cn.Execute "EXEC " & StrSProc & " " & StrParam
End If
cn.Close: Set cn = Nothing
fncRunSProc = True
Ext:
Exit Function
Err:
MsgBox "予期しないエラーが発生しました、下記を管理者へ連絡して下さい。" _
& vbNewLine & Err.Number & " : " & Err.Description, vbCritical
Resume Ext
End Function
------------------------------------------------------------------------------------------
よろしくお願いします。
No.2
- 回答日時:
正直、db_ownerを付けてストアドにアクセスできない状況というのがあまり想定できないんですが。
。何か対象データベースの権限設定にゴミが残っていませんかね。
SELECT USER_NAME(role_principal_id) FROM sys.database_role_members
WHERE member_principal_id=USER_ID('ユーザ名')
SELECT * FROM sys.database_permissions
WHERE grantee_principal_id=USER_ID('ユーザ名')
SSMSにそのユーザでログインして、そのストアドは実行できるのですか?
SELECT USER_NAME(role_principal_id) FROM sys.database_role_members
WHERE member_principal_id=USER_ID('ユーザ名')
[ db_owner ]と一件表示されました。
SELECT * FROM sys.database_permissions
WHERE grantee_principal_id=USER_ID('ユーザ名')
[ 0DATABASE00101CO CONNECTGGRANT ]と一行表示されました。
SSMSにそのユーザでログインして、そのストアドは実行できるのですか?
実行可能で、結果も正常に表示されます。
ACCESS(VBA)側の問題でしょうか?
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php に関して質問です。 各ユーザーがログインした後に 各ユーザーごとに、登録したデータなどを表示 2 2022/04/23 13:46
- WordPress(ワードプレス) ワードプレスの管理画面でユーザー名が違うと出るのですがどこで設定したユーザー名を打てばいいのでしょう 1 2022/03/31 19:36
- gooブログ ブログの記事を書きだしのみに表示したい 1 2022/06/25 19:11
- Windows 10 dアカウントでログイン 5 2022/11/25 17:26
- Windows 10 IME変換について、 1 2022/12/11 16:56
- その他(IT・Webサービス) グーグルドメインズの解約方法 1 2022/08/14 12:52
- MySQL 「掲示板のログイン画面」はPHP~MySQLに「データベース認証のシステム」方式です。 1 2022/09/27 05:00
- その他(Microsoft Office) こんにちは。Windows10でaccess(拡張子accdb)を右クリックし、プロパティ→全般タブ 1 2023/02/03 19:14
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- その他(セキュリティ) Facebookアカウントを乗っ取られ、ログインも出来ずパスワードの再設定もできずに困っている 2 2023/02/17 14:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーに与える権限に付いて
-
MSDEまたはSQLServerでReadOnly...
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
Excel-VBAの「しばらくお待ちく...
-
ACCESS ADOでupdateが効かない
-
create temporary tableについて
-
ノートパソコンのHDDを同機種へ...
-
ノートンの解約(「ライセンス...
-
VB6より長文INSERT文でORA1756...
-
phpmyadminでの表示速度が遅い
-
SQLで同じDBに対し2つのコネク...
-
SQL Loaderを使いたい
-
postgreSQLのエラーについて
-
ライセンス証書に記載すべき項...
-
dtexecコマンドを使ってDTSパッ...
-
AccessとMSDEの接続が端末によ...
-
SQLServer2008
-
SQL Serverへ接続できない!
-
OracleのPL/SQLの操作方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MSDEまたはSQLServerでReadOnly...
-
SQL Server時間切れについて
-
今、何のストアドを実行してい...
-
ストアドプロシージャの実行に...
-
ストアドのEXECUTE権限
-
SQLServer2005のストアドプロシ...
-
SQLサーバ ユーザー削除について
-
コンピュータ名を変更するとSQL...
-
SQLSERVERエージェントからのス...
-
T-SQLのデバッグ
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
Excel-VBAの「しばらくお待ちく...
-
SQLサーバー接続 特定のPCがWin...
-
PostgreSqlでFunctionの作成に...
-
Access2010 accdbのエラー「ODB...
-
SQL Loaderを使いたい
-
SQLCMDにて教えていただきたい...
-
既定のインスタンスと名前付き...
-
バッチファイルからのBCP起動に...
おすすめ情報