TRUNCATE権限設定について

このQ&Aのポイント
  • TRUNCATEの権限設定に関して、phpおよびPostgreSQLを使用したWEBアプリケーション開発において、エラーが発生しています。
  • TRUNCATEタイプの権限が認められていないため、一括削除のためのTRUNCATEを設定することができません。
  • バージョンの問題によりTRUNCATEの権限を設定できず、解決策が見つかっていません。
回答を見る
  • ベストアンサー

TRUNCATEの権限設定について

現在、phpおよびPostgreSQLを使用して WEBアプリケーションを開発しています。 その中で、あるテーブルのデータを一括削除するために TRUNCATEを使用したいと思い、以下のようにTRUNCATE権限を設定しようと したところ以下のエラーになりました。 ERROR: unrecognized privilege type "truncate" truncateタイプの権限設定が認められていない感じのエラーでしょうか。 ちなみに、テーブル作成および権限設定はphpPgAdminを使用して行いました。 SQLは以下の通りです。 CREATE TABLE stock_tbl ( cc_no int, course_no int, date int, time_no int, status int NOT NULL DEFAULT 0, del_flg int NOT NULL DEFAULT 0, create_dt timestamp NOT NULL DEFAULT now(), update_dt timestamp NOT NULL DEFAULT now(), PRIMARY KEY (cc_no, course_no, date, time_no) ); REVOKE ALL ON stock_tbl FROM admin; GRANT SELECT, UPDATE, INSERT, DELETE, TRUNCATE ON stock_tbl TO admin; 環境は以下の通りです。 サーバーはCentOS5.5 PostgreSQLのバージョンは8.1.23 phpPgAdminのバージョンは4.1.3 バージョンなどの問題でTRUNCATEの権限を設定できないのかなと思い 色々調べてみたのですが、解決に結びつくものが見当たりませんでした。 なんとか、上記テーブル、ユーザーにTRUNCATEの権限を与えたいのですが どのように設定を行えばよろしいでしょうか? 補足ですが、PostgreSQLのバージョンが8.1.22で 上記テーブルに何の特権も設定せずにアプリケーションでTRUNCATEを 実行してもエラーになりませんでした。 どなたか、上記に関してアドナイスをいただけないでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

POSTGRESQL 8.1.3 http://www.postgresql.jp/document/pg813doc/html/sql-grant.html 参照 も POSTGRESQL 8.2.0 http://www.postgresql.jp/document/pg820doc/html/sql-grant.html 参照 も grant命令にTRUNCATEはないですが。 POSTGRESQL 8.3.0もなかったけど、 POSTGRESQL 8.4.0 http://www.postgresql.jp/document/pg840doc/html/sql-grant.html 参照 にはあるようですね。

like-linux
質問者

お礼

早速のお返事ありがとうございます。 やはりバージョンがこのままではダメなんですね。。。 素直にDELETEで対処することにします。。 ありがとうございました。

関連するQ&A

  • DEFAULT が設定できないのです

    下記の文でテーブルを作ろうとしたところ、 テーブルは作れるのですが、値は何も設定できません。 デフォルト値の設定をしたいのですが、 この文は何が間違っているのでしょうか。 ご教授願います。 CREATE TABLE tbl_id ( id int NOT NULL DEFAULT 1 );

    • ベストアンサー
    • MySQL
  • PostgreSQLのテーブル構造を取得したい

    現在PostgreSQLとPHP5を利用してアプリケーションを開発しております。 PHPにて現在すでに存在するPostgreSQLのテーブルの定義情報を取得するにはどうすればよろしいでしょうか。テーブルの定義情報は下記のようにSQLのCREATE文で取得したいと思っております。 CREATE TABLE favorite ( code serial NOT NULL, reg_date timestamp without time zone NOT NULL DEFAULT now(), update_date timestamp without time zone, title text, url text, u_id character varying(20) NOT NULL, enabled_flag smallint NOT NULL DEFAULT 1, CONSTRAINT web_favorite_pkey PRIMARY KEY (fv_code) ) 何卒よろしくお願いいたします。

  • MySQLのテーブル設計で迷っています(桁数)

    MySQLのテーブル設計で迷っています。 クリエイト文のカッコの中は桁数を表しているのでしょうか?それともバイト数でしょうか?桁数であれば、それぞれの型で何桁まで設定できますでしょうか? int型のnoを18桁に変更したいのですが、調べているうちに迷ってしまいました。 型 バイト 最小値 最大値 TINYINT 1 -128 127 SMALLINT 2 -32768 32767 MEDIUMINT 3 -8388608 8388607 INT 4 -2147483648 2147483647 BIGINT 8 -9223372036854775808 9223372036854775807 CREATE TABLE `user` ( `no` int(8) unsigned NOT NULL auto_increment, `id` varchar(24) NOT NULL default '', `email` varchar(255) NOT NULL default '', `reg_date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`no`) ) TYPE=MyISAM;

    • ベストアンサー
    • MySQL
  • NOTNULL制約について

    MYSQL ver4.0.20a 下記のようにNOTNULL制約を付けてテーブルを作成するのですが、 デフォルト値が勝手に設定されてしまいます。 CREATE TABLE TEST_01 ( NO int(8) NOT NULL auto_increment, STATUS int(1) NOT NULL, TOUROKUBI date NOT NULL, MEMO varchar(200) NOT NULL, PRIMARY KEY (NO) INT型だと 0 varchar型だと '' date型だと 0000-00-00 インサートの時に値がNULLの場合、SQLエラーを返してほしいのですが、 デフォルト値が設定されている為、登録されてしまいます。 本当はNOTNULL制約で、DBにチェックを任せたいのですが・・・ どなたかご存知の方、教えてください。 お願いします。

    • ベストアンサー
    • MySQL
  • インデックスキーを設定するとKeyがMULに。

    MySQLのインデックスキーを設定するとプライマリーキーが設定されてしまいます。 phpMyAdminを使用しています。 localhostページの一番下には、下記2つの注意が発せられています。 ■phpMyAdmin の新しいバージョンが提供されています。アップグレードの検討をお奨めします。最新バージョンは 3.5.1 で、2012-05-03 にリリースされています。 ■phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。 localhostページの右側にあるバージョン情報は、 <データベースサーバ> ソフトウェア: MySQL ソフトウェアバージョン: 5.0.96-community-nt - MySQL Community Edition (GPL) プロトコルバージョン: 10 サーバの文字セット: UTF-8 Unicode (utf8) <ウェブサーバ> Apache/2.4.1 (Win32) PHP/5.2.17 データベースクライアントのバージョン: libmysql - 5.0.51a PHP 拡張: mysqli <phpMyAdmin> バージョン情報: 3.5.0, 最終安定バージョン: 3.5.1 現段階は、下記のようなテーブル構造になっています。 下記は質問用にデータをコピーするためにMySQL monitorを使いました。 フィールドの追加やキーの追加と削除はphpMyAdminで行っています。 (1)テーブルの構造 mysql> SHOW FIELDS FROM `infotable`; +----------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | text | NO | | NULL | | | kudamono | text | NO | | NULL | | | coment | text | NO | | NULL | | | tes | int(11) | NO | | NULL | | +----------+---------+------+-----+---------+-------+ (2)`tes`にインデックスキーを設定 phpMyAdminの「構造」画面でtesフィールドの「操作」欄の「その他」ドロップダウンから「インデックスを追加する」をクリック phpMyAdminの画面に ALTER TABLE `infotable` ADD INDEX ( `tes` ) と表示され`tes`にインデックスキーを設定しました。 (3)インデックスキー設定後のテーブルの構造 mysql> SHOW FIELDS FROM `infotable`; +----------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | text | NO | | NULL | | | kudamono | text | NO | | NULL | | | coment | text | NO | | NULL | | | tes | int(11) | NO | MUL | NULL | | +----------+---------+------+-----+---------+-------+ ここでMULという文字が出てきて調べてみると、 プライマリーキーの重複を表す文字で、 インデックスを設定したはずなのに プライマリーキーが設定されてしまいました。 (4)text型のnameフィールドにもやってみます。 text型の場合は、tesフィールドと同じ方法ではできなかったので、 「SQL」画面で ALTER TABLE `infotable` ADD INDEX (`name`(10)) を実行しました。 mysql> SHOW FIELDS FROM `infotable`; +----------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | text | NO | MUL | NULL | | | kudamono | text | NO | | NULL | | | coment | text | NO | | NULL | | | tes | int(11) | NO | MUL | NULL | | +----------+---------+------+-----+---------+-------+ text型も同じ状態になってしまいます。 なぜMULになってしまうのでしょうか。 インデックスを追加するにはどうしたらよいでしょうか。 ちなみに ALTER TABLE `infotable` DROP INDEX `tes` を実行後はtesのMULは消えます。

    • ベストアンサー
    • MySQL
  • PHP+mysql データ重複登録

    ◆PHPバージョン 5.3.3 ◆mysqlバージョン 4.1.22 ◆テーブル情報 `no` int(11) NOT NULL auto_increment, `name` text NOT NULL, `mail` text NOT NULL, `memo` text NOT NULL, `updating` timestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (`no`) ENGINE=MyISAM DEFAULT CHARSET=utf8 ◆SQL (1)insert into test(name, mail, memo) values ('abc','abc@test.com','abc') (2)insert test set name='abc', mail='abc@test.com', memo='abc' ◆処理概要 $conn = mysql_connect(ホスト、ユーザ、パスワード); mysql_query("set names utf8"); $rs = mysql_select_db(DB名, $conn); $result = mysql_query(SQL, $conn); ◆登録情報 (1, 'abc', 'abc@test.com', 'abc', '2011-09-02 16:28:57'), (2, '', '', '', '2011-09-02 16:28:57'), 【問題】 上記SQL(1)、(2)どちらでDBに登録しても、登録情報のように同時に空データも同時に登録されてしまう 全く原因の検討がつかないので、何か手がかりがありましたらご教授頂けたらと思います。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • pearの認証(Auth)ができません。

    下記のサイトを参考にして認証サンプルを作成しました。 http://blueeyesblue.cocolog-nifty.com/technote/2007/09/pearauthmdb2-e2.html 下記のコマンドを実行してインストール済みかを確認しました。 pear list -------------------------------------------------- Auth 1.6.4 stable MDB2 2.5.0b3 beta MDB2で正常にデータベースに接続できるかを確認しました。 問題なく接続できました。 下記のテキストボックスに値を入力して[Login]ボタンをクリックしたら下記のエラーが出力されました。 ・Username ・Password ※ログイン画面はAuthのデフォルト画面を使用しています。 [エラー] login failed テーブルは下記のように作成しています。 CREATE TABLE TBL_USER (  no BIGSERIAL PRIMARY KEY,  name VARCHAR(64) NOT NULL,  mail VARCHAR(128) NOT NULL,  password VARCHAR(128) NOT NULL,  del VARCHAR(1) DEFAULT '0' NOT NULL,  ins_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  ins_name VARCHAR(64) NOT NULL,  upd_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  upd_name VARCHAR(64) NOT NULL ); ※テーブルのpasswordフィールドに格納している値は下記のように生成して追加しました。 mkpasswd -l 7 php -r 'echo md5(*******);' ※md5に指定している値はmkpasswdで出力された値を指定しました。 サンプルコードは下記の個所のみを変更しました。 $options = array(  "dsn" => "pgsql://ユーザー名:パスワード@localhost/データベース名",  "table" => "TBL_USER",  "usernamecol" => "name",  "passwordcol" => "password", ); 正直、何が原因なのかわからず困っています。 どうかご存知の方がいましたらアドバイスいただけませんでしょうか。 また今まで認証は1から自作していましたがpearの認証は使いやすいみたいな記事を読んだので使用しようと思いましたが・・・ 自作の認証とpearの認証ではどちらがいいのでしょうか。 ご意見等、何でも構いませんので教えていただけませんでしょうか。 宜しくお願いします。

    • 締切済み
    • PHP
  • 時間を自動計算してディフォルトに設定

    以下のようなテーブルを作りたいと思うのですが、 CREATE TABLE hogeTBL ( id bigint(20) NOT NULL AUTO_INCREMENT, product_code varchar(20) NOT NULL default, start_time datetime NOT NULL default '0000-00-00 00:00:00', end_time datetime NOT NULL default '0000-00-00 00:00:00', sub_time datetime NOT NULL default(ここにend_time-start_timeの値を設定したい), PRIMARY KEY (id) ) TYPE=MyISAM; 見たとおり、インサート時、sub_timeのところに自動で end_time - start_time の、差分値が挿入されるようにしたいのですが、構文が思いつきません。 そもそもこういったことはCreate Tableで可能なのでしょうか・・・? サーババージョンは4.1.22です。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • create table時のdefaultにLAST_INSERT_ID()を使う

    いつもお世話になってます。 現在、postgreSQL→MySQLへの移行作業をしようとしています。 型が微妙に違う等の修正を手作業で行っているのですが、 postgreSQLの下記の型(default値)をMySQLでどう設定してよいかわからずに困っています。 ■postgreSQLのcreate文 CREATE TABLE test_tab ( id_i serial NOT NULL, parent_id integer DEFAULT currval('inquiry_tab_id_i_seq'::text) ) 下記のような感じでMySQLで出来るかなと思ったらうまく出来ませんでした。 ■試してみたMySQLのcreate文 CREATE TABLE test_tab ( id_i int primary key not null auto_increment, parent_id integer DEFAULT LAST_INSERT_ID() ) どう設定すれば、同じ設定のテーブルが作れるのか、どなたかご教授願えませんでしょうか。 よろしくお願いします。

  • phpPgAdminの使い方について

    どなたか教えてください。 phpPgAdminで特権ユーザ(root)で権限を制限したユーザを作成しました。 以下権限内容です。 (スーパーユーザー権限 :No  データベースを作成権限:No  ロールを作成権限:No  特権を引き継ぎ権限:No) 特権ユーザ(root)がデータベースを作成しテーブルを作成します。 所有者はさきほど作成したユーザを指定しました。 権限を制限したユーザでログインし作成したデータベースに接続。 データベースの項目で特権項目が見えてしまいます。 この特権項目を非表示かクリックすることができないようにするにはどのように すればいいでしょうか? 環境 CentOS 5.4 postgreSQL 8.1系 php 5.1.6 apache2.2.3 phpPgAdmin 5.0.2 お分かりの方がいらっしゃいましたら、 回答よろしくお願いします。