2016-05-03 5 views
0

権限を確認するためのストアドプロシージャを作成します。私は次のように試してみましたが、私がここで欠けているものはありません。MySqlでGrantをチェックするためのストアドプロシージャを書くには?

//simple Query "SHOW GRANTS FOR testuser @'192.168.1.180'" - It is working 

CREATE DEFINER=`abc`@`localhost` PROCEDURE `SP_GetGrantAllPriviledge`(
IN Username TEXT, 
IN Hostname TEXT 
) 
BEGIN 
    SHOW GRANTS FOR Username @Hostname; //doesn't work 
END 

誰かが私に迷っているものを提案できますか?

答えて

0
@Hostname; is the source of issue 

更新文を準備して、あなたのSPは:

CREATE PROCEDURE `SP_GetGrantAllPriviledge`(
IN Username TEXT, 
IN Hostname TEXT 
) 
BEGIN 

    SET @sql = CONCAT('SHOW GRANTS FOR ',Username,' @',Hostname,'; '); 
     PREPARE stmt FROM @sql; 
     EXECUTE stmt; 
END 
+0

許可を確認するためにこの2つのパラメータをホスト名に渡しても機能しません。 1- ":: 1"、2- "192.168。%"。構文エラーが発生します。私が質問で合格すれば完璧に走ります。 –

+0

私の呼び出しプロセスを見せてください...私の場合SP_GetGrantAllPriviledge( 'root'、 'localhost')コールを使用しました –

+0

"locahost"の代わりに ":: 1"を渡してこのストアドプロシージャをチェックしてみてください。また、クエリウィンドウで直接クエリを実行しようとします。それは、クエリウィンドウで正常に動作します。しかし、ストアドプロシージャに構文エラーがスローされます。 –

1

INFORMATION_SCHEMAでTABLE_PRIVILEGESを使用できます。

SELECT * 
FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES 
WHERE `GRANTEE` = CONCAT('''', Username, '''@''', Hostname, '''') 
+0

私はこのように試してみましたが、それは特権を返しません。次の両方を試すことができます:1-あなたのクエリ: 'SELECT * FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES WHERE' GRANTEE' = 'root @ localhost''そしてこの2- 'SHOW GRANTS FOR root @' localhost''。 2番目は助成金のリストを返しますが、1番目はそうしません。私が何かを逃しているかどうか教えてください。 –

+0

SHOW GRANTSの出力を正確に再現したいのですか、特定の情報を探していますか? COLUMN_PRIVILEGES、SCHEMA_PRIVILEGES、TABLE_PRIVILEGES、およびUSER_PRIVILEGESを介して、すべての特権を(SHOW GRANTSの出力を正確にシミュレートして)見つけることができます。 –

+0

SHOW GRANTSの出力を正確に再現したい。現在、MySqlReader = "query"でこれを取得しています。このような。あなたはお勧めできますか? –

関連する問題