2009-09-28 2 views
3

MySQL에서 데이터베이스 내 테이블 집합에 대해 GRANT를 할 수 있습니까? 일부 테이블 이름은 CREATE 및 DROP 처리 할 수 ​​있지만 다른 테이블 이름은 삭제할 수 없습니까?MySQL에서 GRANT의 테이블 이름에 와일드 카드를 사용할 수 있습니까?

이 중 어느 것도 제대로 작동 :

GRANT SELECT ON `testdb`.`%_testing` TO 'wildcardtest'@'localhost'; 
GRANT SELECT ON `testdb`.`testing%` TO 'wildcardtest'@'localhost'; 

및 MySQL의 매뉴얼은 대답을하거나 방법을 제공하지 않는 것 같습니다.

답변

4

GRANT 문에서 작동하는 유일한 와일드 카드는 *이다

GRANT SELECT ON `testdb`.* TO 'user'@'localhost'; 
GRANT SELECT ON *.* TO 'privilegeduser'@'localhost'; 

그것의 전부 또는 하나; 부여 된 권한에 대한 테이블 이름의 동적 일치 기능은 없습니다.

2

아니요. 테이블 이름은 쉼표로 구분할 수 있지만 GRANT에는 와일드 카드를 사용할 수 없습니다.

+1

좋은 예가 될 것입니다. – TekTimmy

1

새 데이터베이스를 만듭니다. 조건이 ...

그런 다음 테스트 사용자를 제공 originaldatabase.tablename 에서 SELECT *로 VIEW 테스트를 작성하고이 새 데이터베이스 의 원본 데이터베이스에 대한 액세스 (allready 원본 데이터베이스에 대한 액세스 권한이있는 사용자를 사용) 주세요 newattatabase에 접근하기 GRANT는 NewDatabase를 선택한다. * to 'testuser'@ 'localhost'

그런 다음 테스트 사용자가 액세스 할 테이블에 대한보기 만 생성한다.

또한 당신이보기의 WHERE 부분에서 사용자를() 할 수있는 기억

예 : 는 선택으로보기 테스트를 만들 *에서 original.customer 곳 mysql_user = USER()

에서 original.customer 다음에는 'mysql_user'컬럼이 있어야합니다. 테스트 사용자가 볼 수있는 모든 행에는 testuser @ localhost가 있어야합니다.

testuser는 생성 된 모든 뷰를 데이터베이스 ' 테스트 '

+0

이 답변에는 와일드 카드가 관련된 곳이 없습니다 (질문 제목 참조). – syck

+0

@syck 질문은 원래 데이터베이스의 일부 테이블로만 사용자를 제한하는 방법입니다. 사용되는 테이블에 대한 '보기'만 만들면 최종 사용자는 NewDatabase에있는 테이블에만 액세스 할 수 있습니다. –

+0

질문 제목에 언급 된 바와 같이, OP는 와일드 카드를 사용하여 특정 테이블에 액세스하는 방법을 알고 싶어했습니다. 단일 테이블에 대한 권한 부여 (또는 뷰 생성)는 문제가 아니지만 때로는 적합하지 않을 수 있습니다. 때로는 수백 또는 수천 개의 유사한 표로 구성되는 과학 데이터를 생각해보십시오. – syck

관련 문제