사용자가 SELECT
및 CREATE TEMPORARY TABLES
권한이있는 슬레이브 데이터베이스가 복제 외부에서 변경되지 않도록해야하지만 INSERT
(및 UPDATE
및 DELETE
) 능력이없는 생성되면, CREATE TEMPORARY TABLES
특권은 꽤 쓸모가 없습니다.MySQL의 임시 테이블에만 삽입, 업데이트 및 삭제 권한을 부여 할 수 있습니까?
임시 테이블에만 이러한 권한을 부여 할 수 있습니까?
내가
편집의 MySQL 5.5을 실행하고 있습니다 : 나는 명령을 실행 PHP 및 PDO를 사용하고 있습니다. 아마도 EDIT 2
@의 phreakv6의 답변에 따라, 세션에 문제가 : 내 전체 테스트 코드 : 다음과 같은 출력 만 SELECT
및 CREATE 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'
흠,'INSERT'와'DELETE'와 같은 테이블을 업데이트하려고 할 때'1142 UPDATE 명령이 사용자에게 거부되었습니다. '라는 메시지가 나타납니다. –
"임시 테이블"에 대한 아이디어가 비 영구적 인 존재라고 생각합니다. . 따라서 권한은 세션에만 유효하며 이후에는 유효하지 않습니다. 다른 사용자가 아닌 다른 연결에서 임시 테이블에 액세스하려고합니까? – phreakv6
나는 그렇게 생각하지 않는다.코드에서 CREATE TEMPORARY TABLE 다음에 줄에'INSERT' 쿼리가있는 테스트 파일을 만들었고 동일한 권한 거부 오류로 실패합니다. 오류없이 '선택'할 수 있는데, 세션 내에서 여전히 그렇다는 것을 의미한다고 생각합니다 (그렇지 않으면 테이블을 찾을 수 없다고 말하는 것입니까?) –