Access(Jet4.0)SQLでGRANTが使用できない

このQ&Aのポイント
  • AccessでGrantを使ったSQLクエリを実行すると、正常に実行されないエラーが発生します。
  • 管理者権限でログインしているにも関わらず、特定のユーザに読み取り権限の付与・削除ができません。
  • SQLステートメントが正しくないというエラーメッセージが表示され、原因が分からない状況です。
回答を見る
  • ベストアンサー

Access(Jet4.0)SQLでGRANTが使用できない

AccessでGrantを使った以下のようなSQLクエリを実行し、 特定のユーザに読み取り権限の付与・削除を 行おうとしているのですが、正常に実行されません。    grant select on [DbName] to [UserName] エラーの内容としては 『SQLステートメントが正しくありません。 'Delete'、'Insert'、'プロシージャー'、'Select'または 'update'を使用してください』 とのメッセージが表示されます。 管理者権限でログインしてユーザー権限のユーザを 指定して処理を行っています。 構文も間違っていないと思うので、原因がつかめず困惑しています。 心当たり、間違い等、可能性レベルでも結構ですので ご教授・ご指摘いただけますようお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yu_tang
  • ベストアンサー率81% (26/32)
回答No.1

経験は特にありませんので参考意見ですが。 Advanced Microsoft Jet SQL for Access 2000 http://msdn.microsoft.com/en-us/library/aa139977(office.10).aspx 上記文書内に、下記の一節があります。 Note The GRANT and REVOKE statements can be executed only through the Jet OLE DB provider and ADO. They will return an error message if used through the Access SQL View user interface or DAO. ですので、推測ですが下記のように DAO 経由で実行しようとして いらっしゃるのではないでしょうか。 CurrentDb.Execute "GRANT SELECT ON TABLE myTable TO MyGroup" 正しくは、Jet OLE DB プロバイダと ADO 経由で実行する必要が あります。 たとえば Access 上から開いているカレントのデータベースに 対して実行するなら、こんな感じではないでしょうか。 CurrentProject.Connection.Execute "GRANT SELECT ON TABLE myTable TO MyGroup" 単発の変更でしたら [ツール]-[セキュリティ] から GUI ベースの 手作業で変更したほうが簡単ですが…。

参考URL:
http://msdn.microsoft.com/en-us/library/aa139977(office.10).aspx
Pachi_Dog
質問者

お礼

yu_tang さま 回答ありがとうございました。 ご指摘の通り、DAO 経由で実行しようとしておりました。 回答を参考にJet OLE DB プロバイダ経由で実行するよう、簡易な .NETアプリケーションを作成したところ、無事Grantを通すことが 出来ました。 (ワークグループ情報ファイルの指定が必要であることが 分からず随分時間が掛かってしまいましたが f^^;) 拙い質問にも丁寧なご回答いただきありがとうございました。

関連するQ&A

  • asp.NET内でSQLプロシージャを実行させた

    お世話になります。  SQL2000+asp.NETの環境で、SQLのプロシージャを実行させようとしています。 このプロシージャはテキストファイルを読み込んでデータベースに追加・削除するもので、ここで使用している関数は  ・DELETE/UPDATE/INSERT  ・BULK INSERT  ・CURSOR です。このプロシージャを実行させるには「.NETユーザー」に対し、  サーバーロールにてbulkadmin  ユーザ権限にてdd_ddladmin の権限を付与すれば実行されることは確認しています。  ここで、ご質問なのですが、asp.NETでプログラミングされていらっしゃる方は、普通にWEBログインユーザーに上記権限を付与していらっしゃるのか知りたいのです。  逆に、この権限付与は危険だからsubプロシージャにて記述したほうがいいよとかお教えいただければ、と思います。  以上よろしくお願いいたします。

  • 権限付与(変更)ができないです・・・・。

    CentOS5.2, MySQL version: 5.0.45 を使用しています。 現状のユーザ権限は次のようになっています。 mysql> use mysql Database changed mysql> select host, user, select_priv, insert_priv, update_priv, delete_priv from user; +-----------+---------+-------------+-------------+-------------+-------------+ | host | user | select_priv | insert_priv | update_priv | delete_priv | +-----------+---------+-------------+-------------+-------------+-------------+ | localhost | root | Y | Y | Y | Y | | abcd | taro | N | N | N | N | +-----------+---------+-------------+-------------+-------------+-------------+ これを スーパーユーザで入り、 mysql> grant all privileges on DB.* to 'taro'@'abcd' identified by 'password' with grant option; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) として終了し、クライアントから接続しなおしましたが、taroの権限が Y になりません。 どうすれば Y にすることができるでしょうか?

    • ベストアンサー
    • MySQL
  • プリペアードステートメントの最終的なSQL文の確認

    プリペアードステートメントでSQLを実行しております。 プリペアードステートメントで最終的に実行されたSQL文を確認する方法はないでしょうか。 <実行SQL> $sql = "SELECT * FROM member where user = :username and password = :password and delflag ='0'"; $stmt = $this->db->prepare($sql); $flag = $stmt->execute(array(':username' => $user,':password' => $pass)); $passには、ユーザーから入力されたパスワード情報 $userには、ユーザーから入力されたユーザー名が入っております。 executeで実行された、$userの内容と$passwordの内容が埋め込まれ実行された 最終的な$SQL文を確認したいと思っています。 どのようにすれば確認できるものなのでしょうか。 ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • 選択クエリを開けない

    お尋ねします。 OSはXP、ACCESS2002でDB作成中です。 ADOで選択クエリを開きたいのですが、エラーが出てうまくいきません。 Dim cnc As New ADODB.Connection Dim rst As New ADODB.Recordset Set cnc = CurrentProject.Connection stSQL = "Q_残高計算" rst.Open stSQL, cnc ・・・・・・・・・・・・・・・・・・・・・・・ 上記のコードで、”Q_残高計算”という選択クエリを開きたいのですが、実行すると、 「実行時エラー'2147217900(80040e14)': SQLステートメントが正しくありません。'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、または'UPDATE'を使用してください。」 というエラーメッセージが出てしまいます。 どこがまずいのでしょうか? よろしくお願いします。

  • プロシージャの実行

    ストアドプロシージャを実行させようと、プロシージャに実行権限を付与しました。(grant execute ・・・) その後実行しようとすると、 オブジェクト aaa_proc、データベース bbb、所有者 ccc について EXECUTE パーミッションが拒否されました とエラーになります。 aaa_proc は プロシージャ名。 bbbは プロシージャを書くときに use bbb と書いてるデータベースの名前。 cccは ユーザ名としてください。 他に何の権限を与えてやればいいのか、どなたかか教えてください。 宜しくおねがいします。

  • ユーザーへのディレクトリ権限付与について

    WindowsXPのOracle9i環境にて、 まず、以下のようにしてユーザ「username」を作成しました。 create user username identified by Password default tablespace tab_space temporary tablespacetemp; grant dba,resource,connect to username; 次にsysユーザにて、CREATE DIRECTORY FILE_PATH as 'd:\temp'; ディレクトリを作成しました。 そして、そのディレクトリに対して、以下のように権限付与しようとすると、「ユーザ"username"が存在しません。」エラーが発生します。 grant READ,WRITE ON directory dir to username; また、grant READ,WRITE ON directory dir to public; とすると、権限付与は成功しますが、ユーザusernameにはディレクトリ参照権限は与えられていませんでした。 何か間違っておりますでしょうか? それとも何か手順で足らないものがあるのでしょうか? ご教示いただければと思います。

  • SQLファイルの読み込み

    PHP上にSQL文を書くことはできますがSQLファイルを読み込むことはできるのでしょうか? 例えばSQL上では %\i create.sql のように実行してテーブルを作りますがこれを同じようにPHP上で $conn = pg_connect("host=localhost dbname=**** user=****"); $query = "\i create.sql"; pg_query($conn, $query); と記述してもエラーになってしまいます。 PHP上ではそもそも読み込みはできないのでしょうか? それとも文字型の指定などが間違っているのでしょうか?

    • 締切済み
    • PHP
  • Access2000におけるテーブル追加について

    テーブル1にテーブル2の内容をすべて追加しようと思います。 二つのテーブルのフィールド項目は同じにしました。(テストなのでとりあえず番号と名前) マクロを使ってやろうと思い、アクションを「SQLの実行」とし、SQLステートメント には「INSERT INTO <テーブル1> SELECT<社員番号>,<名前>FROM<テーブル2>」 としました。 しかし、マクロを実行してみると「INSERT INTO 構文エラー」となってしまいます。 なぜなんでしょうか?

  • 参照権限の付与方法

    環境は、Windows Server 2003、Oracle 9.2.0.6.0 になります。 userAが持っている表、ビューの参照権限を userBに与えようと思います。 userAでログインし、以下のSQLを発行したところ、  grant select any table to userB; 以下のエラーが出ました。  ORA-01031:権限が不足しています。 これは、userAに権限を付与する権限がないのだと 理解しました。 ■疑問1 この現象は、userAに権限を付与する権限がない との理解で正しいでしょうか? また、userAに「権限を付与する権限」を付与するには どのようなSQLを発行すればよいでしょうか? ■疑問2 systemユーザでログインし、userBに権限を与える方法も あると思います。 その場合、以下のSQL文になると思います。  grant select on userA.testtable to userB この場合、表、ビュー1つずつ与える必要がありますが、  grant select any table to userB; のように、全ての表、ビューを参照権限を与えることはできるでしょうか?

  • GRANTステートメントによるユーザー追加について(LOAD DATA INFILEの権限)

    GRANTステートメントで、「LOAD DATA INFILE」の権限を持ったユーザ(例:kasai)を作成したいのですが、上手くいきません。 mysql> GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOAD DATA INFILE ON *.* TO kasai; ERROR 1064: You have an error in your SQL syntax. Check the manual that corresp onds to your MySQL server version for the right syntax to use near 'LOAD DATA IN FILE ON *.* TO kasai' at line 1 何かよい知恵を教えてください

    • ベストアンサー
    • MySQL