2011-10-05 23 views
5

Sử dụng SQL tiêu chuẩn - đã đã làm điều này nhiều lần trong PosgresQL và Oracle - Tôi muốn cấp SELECT để tất cả các bảng trong schema1 trừsecret để user1trong MySQL, thu hồi một đặc ân sau khi cấp một đặc ân chung

grant select on schema1.* to user1; 
revoke select on schema1.users from user1; 

nhận lỗi:

ERROR 1147 (42000): There is no such grant defined for user 'user1' on host '%' on table 'secret' 

tôi đang làm gì sai?


Rõ ràng đây là hành vi MySQL chuẩn !!

Làm cho việc hiểu sự thiếu tinh vi bảo mật trong ứng dụng bằng cách sử dụng MySQL trở nên dễ dàng hơn - để thiết lập bảo mật người dùng chính xác trong MySQL là cực kỳ khó khăn.

+1

Bạn nên cấp đặc quyền SELECT cho mỗi bảng, theo từng bảng. – Devart

+0

Bạn có chắc chắn không? Tiêu chuẩn ANSI cho biết những gì tôi đang làm là chính xác. –

Trả lời

5

Không có gì. MySQL không mở rộng ký tự đại diện schema1.* cho các bảng riêng lẻ, cũng như không lưu trữ "ngoại lệ". Bảng quyền hạn lưu trữ các quyền được cấp. Do đó, vì bạn đã không thực sự cấp bất cứ điều gì trên schema1.users, không có gì để MySQL thu hồi. Nó chỉ đi xuống đến cách MySQL xử lý các quyền.

+0

để GRANT/REVOKE trong MySQL là _not_ ANSI tiêu chuẩn? –

+1

@ccyoung Có lẽ. Tôi không quen thuộc với tiêu chuẩn. Tôi biết có một số nơi khác mà MySQL deviates, vì vậy nó sẽ không làm tôi ngạc nhiên. Tôi khuyên bạn nên mở một lỗi với nhóm MySQL (có khả năng là đã tồn tại), nhưng cũng sẽ không đề xuất đưa ra quyết định cuộc sống quan trọng cho đến khi nó được giải quyết. Chúng ta đang nói về MySQL cốt lõi đã được đặt ra trong nhiều năm (hàng thế kỷ trong thời gian Internet). Cơ hội mà bao giờ được thay đổi là mỏng để không ai. – Mac

Các vấn đề liên quan