2011-12-03 12 views
26

sınırlı sayıda tabloya ver, bazı testler yapıyorum ve db'de yalnızca 1 veya 2 tabloya erişebilen bir kullanıcı oluşturabilir miyim görmeye çalışıyorum. Bunun nasıl yapıldığını bilen var mı? Aşağıdaki kod başarısız olur:Kullanıcı erişimini MySQL

Hata, sözdizimimde bir hata olduğunu söylüyor.

cevap

40

iki ayrı GRANT ifadeleri olarak çalıştırın:

GRANT 
    priv_type [(column_list)] 
     [, priv_type [(column_list)]] ... 
    ON [object_type] priv_level 
    TO user_specification [, user_specification] ... 
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}] 
    [WITH with_option ...] 

object_type: 
    TABLE 
    | FUNCTION 
    | PROCEDURE 

priv_level: 
    * 
    | *.* 
    | db_name.* 
    | db_name.tbl_name 
    | tbl_name 
    | db_name.routine_name 

parçası:

GRANT SELECT ON testdb.fruits TO [email protected] IDENTIFIED BY 'pass'; 
GRANT SELECT ON testdb.sports TO [email protected] IDENTIFIED BY 'pass'; 

The MySQL GRANT syntax sadece priv_level pozisyonunda :, o joker olarak bir * kullanabilir olsa bir nesne izin verir Aşağıdaki MySQL 5.5 üzerinde çalışmak görünmüyor. How to "subtract" privileges in MySQL adresleri neden.

GRANT SELECT ON testdb.* TO [email protected] IDENTIFIED BY 'pass'; 
REVOKE ALL PRIVILEGES ON testdb.tblname FROM [email protected]; 

Bu olsa garip bir yöntem gibi görünüyor ve ben bireysel olarak GRANT yerine bireysel REVOKE düşünüyorum: Tüm tablolarda SELECT vermek için

sonra seçici Yapabileceğin, iptal.

+0

İlginç. MySQL ayrıca belirli tablolara erişimi kaldırabilir mi? Bu sayede 'testdb. * 'Atayabiliyorum. Daha sonra erişime izin vermediğim tablolara erişimi kaldırırım. – enchance

+0

@enchance Evet, yukarıdaki eke bakınız. –

+0

Teşekkürler, Michael. Bu çözüldü. – enchance

0

Sen mysql.tables_priv table doğrudan kullanabilirsiniz: GRANT kullanırken bu tablolar için manuel güncellemeden sonra

INSERT INTO mysql.tables_priv (`Host`, `Db`, `User`, `Table_name`, `Grantor`, `Table_priv`) 
VALUES 
('%', DATABASE(), 'someuser', 'mytable1', CURRENT_USER, 'Select,Insert,Update,Delete'), 
('%', DATABASE(), 'someuser', 'mytable2', CURRENT_USER, 'Select,Insert,Update,Delete') 

, gerekli değil (açıkça izin önbelleğini güncellemek için MySQL anlatmak için FLUSH PRIVILEGES sorguyu çalıştırmak gerekir

İlgili konular