4

サーバーに(別のマシンから)接続すると、

Error Code: 1044 Access denied for user 'username'@'%' to database 'dbname'

関数を作成しようとすると。しかし、自分の権限を見ると

SHOW GRANTS FOR CURRENT_USER;

私は得る

'GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE ROUTINE ON *.* TO ''username''@''%'' IDENTIFIED BY PASSWORD ''--stripped--'' WITH GRANT OPTION'

特に、これには CREATE ROUTINE が含まれます。関数を作成できないのはなぜですか? できるように変更するにはどうすればよいですか?

4

1 に答える 1

6

CREATE FUNCTIONとは別のがあると思いますCREATE ROUTINE。しかし、いずれにしても、ユーザーはとにかく100%フルアクセスできるように見えるので、次のことができます。

GRANT ALL PRIVILEGES ON *.* TO user@'%' INDENTIFIED BY 'password' WITH GRANT OPTION

ただし、「%」を「localhost」に設定し、この方法でローカルマシン(または少なくとも信頼できるIP)からのみデータベースにアクセスする方がはるかに良いことに注意してください。これによるセキュリティの欠如はあなたに問題を引き起こす可能性があります。

このユーザー/パスワードを使用してWebスクリプトからデータベースに接続しないでください。

編集 忘れました:ルーチンと関数はグローバルに付与する必要があります。を追加します。テーブル自体にグラントを追加しようとするため、機能しません。試す:

GRANT ALTER ROUTINE,CREATE ROUTINE, EXECUTE ON * TO user@'%' IDENTIFIED BY 'password'

ここにそれのより長い説明があります:http://dev.mysql.com/doc/refman/5.0/en/grant.html

于 2010-10-22T14:55:39.690 に答える