2016-06-07 6 views
0

사용자가 SELECTCREATE TEMPORARY TABLES 권한이있는 슬레이브 데이터베이스가 복제 외부에서 변경되지 않도록해야하지만 INSERT (및 UPDATEDELETE) 능력이없는 생성되면, CREATE TEMPORARY TABLES 특권은 꽤 쓸모가 없습니다.MySQL의 임시 테이블에만 삽입, 업데이트 및 삭제 권한을 부여 할 수 있습니까?

임시 테이블에만 이러한 권한을 부여 할 수 있습니까?

내가

편집의 MySQL 5.5을 실행하고 있습니다 : 나는 명령을 실행 PHP 및 PDO를 사용하고 있습니다. 아마도 EDIT 2

@의 phreakv6의 답변에 따라, 세션에 문제가 : 내 전체 테스트 코드 : 다음과 같은 출력 만 SELECTCREATE TEMPORARY TABLES 권한이 결과를 가진 사용자에서이 작업을 실행

<?php 
$dbh=new PDO("mysql:host=localhost;dbname=scratch;charset=utf8", 'readonly', 'readonlytestingonlypassword',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

$prepped=$dbh->prepare("CREATE TEMPORARY TABLE `TempPermissionsTest` (`ID` INT(11) NOT NULL ,`TestVal` INT(11) NOT NULL)"); 
$prepped->execute(); 
$err=$prepped->errorInfo(); 
if ($err[0]>0) print $err[1]." : ".$err[2]; 

$prepped=$dbh->prepare("INSERT INTO `TempPermissionsTest` (`ID` ,`TestVal`) VALUES (1,3)"); 
$prepped->execute(); 
$err=$prepped->errorInfo(); 
if ($err[0]>0) print $err[1]." : ".$err[2]; 

$prepped=$dbh->prepare("SELECT * FROM `TempPermissionsTest`"); 
$prepped->execute(); 
$err=$prepped->errorInfo(); 
if ($err[0]>0) print $err[1]." : ".$err[2]; 

while ($row=$prepped->fetch(PDO::FETCH_ASSOC)) { 
    print_r($row); 
} 
?> 

: 세션이 임시 테이블을 만들었습니다

1142 : INSERT command denied to user 'readonly'@'localhost' for table 'TempPermissionsTest' 

답변

2

후, 서버는 테이블에 더 이상의 권한 검사를 수행하지 않습니다. 작성 세션은 DROP TABLE, INSERT, UPDATE 또는 SELECT와 같은 테이블에 대한 조작을 수행 할 수 있습니다.

그것은 당신의 CREATE TEMPORARY TABLES 특권을 만든 세션에 대해 당신에게 당신의 임시 테이블에 INSERT, UPDATEDELETE 권한을 부여해야합니다 보인다. 이게 당신이 찾고 있는게 아닌가요?

방금 ​​mysql 버전을 발견했습니다. mysql 5.5에 대해서는 운이 없다고 생각한다. this bug을보십시오. CREATE TEMPORARY TABLES 특전을 확장하여 INSERT, UPDATEDELETE이 5.6 이하로 포함되었습니다.

+0

흠,'INSERT'와'DELETE'와 같은 테이블을 업데이트하려고 할 때'1142 UPDATE 명령이 사용자에게 거부되었습니다. '라는 메시지가 나타납니다. –

+0

"임시 테이블"에 대한 아이디어가 비 영구적 인 존재라고 생각합니다. . 따라서 권한은 세션에만 유효하며 이후에는 유효하지 않습니다. 다른 사용자가 아닌 다른 연결에서 임시 테이블에 액세스하려고합니까? – phreakv6

+0

나는 그렇게 생각하지 않는다.코드에서 CREATE TEMPORARY TABLE 다음에 줄에'INSERT' 쿼리가있는 테스트 파일을 만들었고 동일한 권한 거부 오류로 실패합니다. 오류없이 '선택'할 수 있는데, 세션 내에서 여전히 그렇다는 것을 의미한다고 생각합니다 (그렇지 않으면 테이블을 찾을 수 없다고 말하는 것입니까?) –

0

사람들이 다른 dbs에서이 질문을 찾을 수있는 경우보다 일반적인 정보로 허용되는 답변을 보완하십시오.

임시 테이블은 세션 개인용으로 작성되었으며 작성자가이 테이블에 대한 권한을 갖는 방식으로 구현되었습니다. 위에서 언급 한 것처럼 MySQL에는 임시 테이블에 대한 권한 검사가 없습니다.

PostgreSQL에서 임시 테이블은 처음에는 해당 테이블에 대한 모든 권한을 가진 작성자가 담당합니다. 소유자는 사용 권한을 취소 할 수 있으며 이론적으로도 소유권을 취소하지만 실제로이 작업을 수행하는 응용 프로그램을 인식하지 못합니다.

행성에있는 다른 모든 (또는 예외가 있더라도 거의 모든) RDBMS가 temp 테이블 권한을 생성하는 사용자에 대한 전체 권한으로 유효하게 기본값을 설정할 것으로 기대합니다. 이렇게하지 않으면이 기능의 유용성이 심각하게 제한됩니다.