資料庫許可權控制
1. 如何設置資料庫的許可權
1、首先用管理員進入資料庫級中的安全性,點擊登錄名,點擊新建登錄名。
2. 如何用phpmyadmin設置mysql資料庫用戶的許可權
phpmyadmin設置mysql資料庫用戶許可權可以參考如下操作步驟。
1、用瀏覽器打開phpmyadmin,輸入用戶名和密碼登錄。
3. 簡述構成mysql許可權控制步驟
1、mysql的許可權是,從某處來的用戶對某對象的許可權。
2、mysql的許可權採用白名單策略,指定用戶能做什麼,沒有指定的都不能做。
3、許可權校驗分成兩個步驟:
a、能不能連接,檢查從哪裡來,用戶名和密碼,常見錯誤 ERROR 1045 (28000): Access denied for user ...
b、能不能執行操作,粒度從粗到細,分別為:mysql.user, mysql.db, msql.tables_priv, mysql.columns_priv, mysql.proc_priv。
需要注意的是,這些表各有分工,但是在許可權分配上有一定的重合。
可以這樣理解,mysql 先檢查對大范圍是否有許可權,如果沒有再到小范圍里去檢查。比如:先檢查對這個資料庫是否有select許可權,如果有,就允許執行。如果沒有,再檢查對表是否有select許可權,一直到最細粒度,也沒有許可權,就拒絕執行。舉例來說:要檢查張三能否控制一個團,我只要先檢查張三能否控制一個軍,如果可以,就是有許可權,如果不行,再檢查張三能否控制一個師。因此,粒度控制越細,許可權校驗的步驟越多,性能越差,需要考慮。
4、mysql服務啟動之後,就會把許可權有關的表的數據讀到內存中,對許可權做的修改,是否會即時生效?要看情況,手動修改表數據,需要 flush privileges
5、創建用戶 create user,修改密碼 set password,注意 alter user只是設置密碼過期,可以登錄,但是不能執行任何操作,必須從新設置密碼,刪除用戶 drop user
6、host+user 標示唯一的一個用戶,也就是說都叫張三,從不同地方來的張三是兩個用戶,他們有不同的許可權。
7、那麼問題來了,表中有兩條記錄:'root'@'192.168.1.101' 和 'root'@'%', 現在root來登錄,mysql 怎麼匹配呢?認為是哪個root呢?
mysql 對用戶進行了排序,先對host排序,再對user排序,小范圍在前面,大范圍在後面,從上往下匹配。
8、許可權授予,grant 許可權 on 對象 to 用戶@哪裡來 identified by 密碼
9、收回許可權,revoke 許可權 on 對象 from 用戶@哪裡來,注意revoke 必須要與grant 對應,也就是說,只能收回授予的許可權。
10、那麼問題來了,我授予張三 select的許可權,現在revoke all privileges 也不能收回張三select的許可權,因為沒有對張三 grant all privileges,怎麼解決這個問題?
使用 revoke all privileges,grant option from user
11、許可權級別:從某台主機來的某個用戶,對某個資料庫中某個表的某些列的某部分記錄,是否有許可權。
12、全局:對象是mysql服務的所有資料庫,包含服務級的管理許可權,比如showdown
13、資料庫:對象是某一個資料庫
14、表:對象是資料庫中某個表
15、列:對象是表中的某個列,比如:grant select (name) on xxx to xxx
16、程序:對象是存儲過程和方法。
17、information_scheme,資料庫和表是存放數據的,那麼誰來存放 資料庫和表這些信息呢? information_scheme 就是記錄資料庫和表的,需要注意的是,infromation_scheme沒有對應的物理文件,它是mysql在內存中維護的。
18、許可權設定原則:
a、盡量縮小許可權
b、按業務,分離用戶,不同的業務對應不同的用戶
c、避免許可權粒度太細,因為mysql許可權檢查,會影響性能。
19、文件泄密,linux下mysql客戶端執行的操作記錄在文件 ~/.mysql_history中,輸出重定向/dev/null
20、密碼丟失怎麼辦?
a、mysql啟動,增加選項重置密碼
b、mysql啟動,增加選項不檢查許可權,登陸後修改密碼,退出重啟啟動。
4. MySQL的許可權有哪些
MySQL的許可權有哪些
一.許可權表
mysql資料庫中的3個許可權表:user 、db、 host
許可權表的存取過程是:
1)先從user表中的host、 user、 password這3個欄位中判斷連接的IP、用戶名、密碼是否存在表中,存在則通過身份驗證;
2)通過許可權驗證,進行許可權分配時,按照useràdbàtables_privàcolumns_priv的順序進行分配。即先檢查全局許可權表user,如果user中對應的許可權為Y,則此用戶對所有資料庫的許可權都為Y,將不再檢查db, tables_priv,columns_priv;如果為N,則到db表中檢查此用戶對應的具體資料庫,並得到db中為Y的許可權;如果db中為N,則檢查tables_priv中此資料庫對應的具體表,取得表中的許可權Y,以此類推。
二.MySQL各種許可權(共27個)
(以下操作都是以root身份登陸進行grant授權,以p1@localhost身份登陸執行各種命令。)
1. usage
連接(登陸)許可權,建立一個用戶,就會自動授予其usage許可權(默認授予)。
mysql> grant usage on *.* to 『p1′@』localhost』 identified by 『123′;
該許可權只能用於資料庫登陸,不能執行任何操作;且usage許可權不能被回收,也即REVOKE用戶並不能刪除用戶。
2. select
必須有select的許可權,才可以使用select table
mysql> grant select on pyt.* to 『p1′@』localhost』;
mysql> select * from shop;
3. create
必須有create的許可權,才可以使用create table
mysql> grant create on pyt.* to 『p1′@』localhost』;
4. create routine
必須具有create routine的許可權,才可以使用{create |alter|drop} {procere|function}
mysql> grant create routine on pyt.* to 『p1′@』localhost』;
當授予create routine時,自動授予EXECUTE, ALTER ROUTINE許可權給它的創建者:
mysql> show grants for 『p1′@』localhost』;
+—————————————————————————+
Grants for p1@localhost
+————————————————————————–+
| GRANT USAGE ON *.* TO 『p1′@』localhost』 IDENTIFIED BY PASSWORD 『*′ |
| GRANT SELECT, CREATE, CREATE ROUTINE ON `pyt`.* TO 『p1′@』localhost』|
| GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE `pyt`.`pro_shop1` TO 『p1′@』localhost』 |
+————————————————————————————-+
5. create temporary tables(注意這里是tables,不是table)
必須有create temporary tables的許可權,才可以使用create temporary tables.
mysql> grant create temporary tables on pyt.* to 『p1′@』localhost』;
[mysql@mydev ~]$ mysql -h localhost -u p1 -p pyt
mysql> create temporary table tt1(id int);
6. create view
必須有create view的許可權,才可以使用create view
mysql> grant create view on pyt.* to 『p1′@』localhost』;
mysql> create view v_shop as select price from shop;
7. create user
要使用CREATE USER,必須擁有mysql資料庫的全局CREATE USER許可權,或擁有INSERT許可權。
mysql> grant create user on *.* to 『p1′@』localhost』;
或:mysql> grant insert on *.* to p1@localhost;
8. insert
必須有insert的許可權,才可以使用insert into ….. values….
9. alter
必須有alter的許可權,才可以使用alter table
alter table shop modify dealer char(15);
10. alter routine
必須具有alter routine的許可權,才可以使用{alter |drop} {procere|function}
mysql>grant alter routine on pyt.* to 『p1′@』 localhost 『;
mysql> drop procere pro_shop;
Query OK, 0 rows affected (0.00 sec)
mysql> revoke alter routine on pyt.* from 『p1′@』localhost』;
[mysql@mydev ~]$ mysql -h localhost -u p1 -p pyt
mysql> drop procere pro_shop;
ERROR 1370 (42000): alter routine command denied to user 『p1′@』localhost』 for routine 『pyt.pro_shop』
11. update
必須有update的許可權,才可以使用update table
mysql> update shop set price=3.5 where article=0001 and dealer=』A';
12. delete
必須有delete的許可權,才可以使用delete from ….where….(刪除表中的記錄)
13. drop
必須有drop的許可權,才可以使用drop database db_name; drop table tab_name;
drop view vi_name; drop index in_name;
14. show database
通過show database只能看到你擁有的某些許可權的資料庫,除非你擁有全局SHOW DATABASES許可權。
對於p1@localhost用戶來說,沒有對mysql資料庫的許可權,所以以此身份登陸查詢時,無法看到mysql資料庫:
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema|
| pyt |
| test |
+——————–+
15. show view
必須擁有show view許可權,才能執行show create view。
mysql> grant show view on pyt.* to p1@localhost;
mysql> show create view v_shop;
16. index
必須擁有index許可權,才能執行[create |drop] index
mysql> grant index on pyt.* to p1@localhost;
mysql> create index ix_shop on shop(article);
mysql> drop index ix_shop on shop;
17. excute
執行存在的Functions,Proceres
mysql> call pro_shop1(0001,@a);
+———+
| article |
+———+
| 0001 |
| 0001 |
+———+
mysql> select @a;
+——+
| @a |
+——+
| 2 |
+——+
18. lock tables
必須擁有lock tables許可權,才可以使用lock tables
mysql> grant lock tables on pyt.* to p1@localhost;
mysql> lock tables a1 read;
mysql> unlock tables;
19. references
有了REFERENCES許可權,用戶就可以將其它表的一個欄位作為某一個表的外鍵約束。
20. reload
必須擁有reload許可權,才可以執行flush [tables | logs | privileges]
mysql> grant reload on pyt.* to p1@localhost;
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
mysql> grant reload on *.* to 『p1′@』localhost』;
Query OK, 0 rows affected (0.00 sec)
mysql> flush tables;
21. replication client
擁有此許可權可以查詢master server、slave server狀態。
mysql> show master status;
ERROR 1227 (42000): Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation
mysql> grant Replication client on *.* to p1@localhost;
或:mysql> grant super on *.* to p1@localhost;
mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000006 | 2111 | | |
+——————+———-+————–+——————+
mysql> show slave status;
22. replication slave
擁有此許可權可以查看從伺服器,從主伺服器讀取二進制日誌。
mysql> show slave hosts;
ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation
mysql> show binlog events;
ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation
mysql> grant replication slave on *.* to p1@localhost;
mysql> show slave hosts;
Empty set (0.00 sec)
mysql>show binlog events;
+—————+——-+—————-+———–+————-+————–+
| Log_name | Pos | Event_type | Server_id| End_log_pos|Info | +—————+——-+————–+———–+————-+—————+
| mysql-bin.000005 | 4 | Format_desc | 1 | 98 | Server ver: 5.0.77-log, Binlog ver: 4 | |mysql-bin.000005|98|Query|1|197|use `mysql`; create table a1(i int)engine=myisam|
……………………………………
23. Shutdown
關閉MySQL:
[mysql@mydev ~]$ mysqladmin shutdown
重新連接:
[mysql@mydev ~]$ mysql
ERROR 2002 (HY000): Can』t connect to local MySQL server through socket 『/tmp/mysql.sock』 (2)
[mysql@mydev ~]$ cd /u01/mysql/bin
[mysql@mydev bin]$ ./mysqld_safe &
[mysql@mydev bin]$ mysql
24. grant option
擁有grant option,就可以將自己擁有的許可權授予其他用戶(僅限於自己已經擁有的許可權)
mysql> grant Grant option on pyt.* to p1@localhost;
mysql> grant select on pyt.* to p2@localhost;
25. file
擁有file許可權才可以執行 select ..into outfile和load data infile…操作,但是不要把file, process, super許可權授予管理員以外的賬號,這樣存在嚴重的安全隱患。
mysql> grant file on *.* to p1@localhost;
mysql> load data infile 『/home/mysql/pet.txt』 into table pet;
26. super
這個許可權允許用戶終止任何查詢;修改全局變數的SET語句;使用CHANGE MASTER,PURGE MASTER LOGS。
mysql> grant super on *.* to p1@localhost;
mysql> purge master logs before 『mysql-bin.000006′;
27. process
通過這個許可權,用戶可以執行SHOW PROCESSLIST和KILL命令。默認情況下,每個用戶都可以執行SHOW PROCESSLIST命令,但是只能查詢本用戶的進程。
mysql> show processlist;
+—-+——+———–+——+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——+———–+——+———+——+——-+——————+
| 12 | p1 | localhost | pyt | Query | 0 | NULL | show processlist |
+—-+——+———–+——+———+——+——-+——————+
另外,
管理許可權(如 super, process, file等)不能夠指定某個資料庫,on後面必須跟*.*
mysql> grant super on pyt.* to p1@localhost;
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
mysql> grant super on *.* to p1@localhost;
Query OK, 0 rows affected (0.01 sec)
5. 如何設置資料庫的許可權
一、必要性 隨著近年來資料庫技術的深入發展,以Unix平台為代表的Informix Dynamic Server和以NT平台為代表的MS SQL Server得到了廣泛的應用。在一個公共的環境中,存在大量的用戶操作,有資料庫管理員,主要做數據管理維護工作,也有普通用戶,做一定授權下的數據修改和數據查詢。我們知道,每個資料庫伺服器上可建立多個不同類別的資料庫,而每個資料庫中也可以生成多個存儲過程、表、視圖等。如何保證數據的安全可靠,防止非法存取所造成的破壞和數據泄露,如何進行許可權的劃分和設置,這是安全管理的重點,也是資料庫可靠運行的保證。本文以Informix Dynamic Server為例做詳細說明。 二、許可權的劃分 Informix Dynamic Server使用了三級許可權來保證數據的安全性,它們分別是資料庫級許可權、表級許可權和欄位級許可權,具體為: 1.資料庫級許可權 包括Connect、Resource、DBA三種類別,其中: Connect: 最低級,僅允許用戶訪問資料庫中的表和索引,但不能創建和刪除它們; Resource: 建立在Connect之上,允許用戶在資料庫中創建、刪除表和索引; DBA: 即資料庫管理員,擁有資料庫管理的全部許可權,包括訪問資料庫表、創建和刪除索引、修改表結構、授予資料庫許可權給其他用戶等。 2.表/欄位(視圖)級許可權 指允許進行何種具體操作,主要包括: Select: 從表或欄位中檢索信息; Update: 修改指定欄位的值; Insert: 向資料庫表中添加記錄; Delete: 從資料庫表中刪除記錄; Index: 為一個資料庫表創建索引; Alter: 增加、刪除資料庫表中的欄位,或修改欄位的數據類型; All: 以上所有許可權。 三、許可權的設置 Informix Dynamic Server通過一系列SQL控制語句來實施對用戶許可權的設置,使得不同的用戶只能在各自限定的范圍內存取數據。以下命令格式中Grant表示授予許可權,Revoke表示撤消許可權,User-List指用戶名列表,多個用戶以逗號(,)分隔,對大多數資料庫系統而言,PUBLIC代表所有用戶。 1.對於資料庫,其格式為: Revoke { DBA | Resource | Connect } from { PUBLIC | User-List } Revoke { DBA | Resource | Connect } from { PUBLIC | User-List } 預設情況下,建立資料庫的用戶就是資料庫管理員(DBA),除其本身和Informix用戶外,其它用戶不對該資料庫擁有任何許可權,因此也就不能進行任何形式的訪問。資料庫管理員可根據其他用戶的業務分工、操作范圍授予或撤消DBA、Resource、Connect三種不同的許可權。 2.對於表及視圖,其格式為: Revoke TAB-PRI on [ tab_name | view_name ] from { PUBLIC | User-List } Revoke TAB-PRI on [ tab_name | view_name ] from { PUBLIC | User-List } 其中TAB_PRI表示select、update、delete等操作許可權,tab_name、 view_name分別代表資料庫表名和視圖名。 預設情況下,新建的資料庫表和視圖對能夠訪問該資料庫的用戶賦予了除alter外的所有許可權,有時這是比較危險的,比如對普通查詢用戶,應該有針對性地對許可權重新定義。此外,對一些重要的表或視圖,為防止敏感信息泄露,也應該重新授權。具體做法是:先用Revoke命令撤消原來所有的許可權,再用Grant授予新的許可權。 3.對於欄位: 欄位級許可權的授予和撤消同表級的命令方式基本一致,所不同的僅在於必須把賦予許可權的欄位名列在操作許可權如select、insert、update等之後,通過這樣細化可以實施更有效的數據保護。 4.對於存儲過程: 存儲過程由SQL語句編寫,存放於資料庫中,常與觸發器配合,可以對數據進行批量處理,使用非常方便。但如果授權不嚴格,將導致非法修改現有數據。其許可權設置格式為: Grant Execute on proc_name to { PUBLIC | User-List }; Revoke Execute on proc_name from { PUBLIC | User-List } 其中proc_name表示存儲過程名。 四、角色(role)的使用 在資料庫用戶的管理中,我們可以根據用戶對資料庫數據的需要情況把用戶分為幾組,每一組用戶可以作為一個"角色",每個用戶就是角色的成員。通過使用角色,資料庫系統更容易進行安全性管理,因為一旦某個用戶屬於某一個角色,對許可權的授予和撤消只需針對角色便可。具體使用方法為: 1.創建角色: Create Role role_name1 其中role_name1表示角色名。 2.劃分用戶角色: 即將相關用戶加入到角色中使之成為角色的成員。 Grant role_name1 to { User-List | Role_List } 其中Role_List表示角色列表,因為一個角色可以是另外一個或一組角色的成員。 3.授權角色許可權: 同授權用戶許可權的方法相同,但只能對表級和欄位級許可權有效,不能授予資料庫級許可權給一個角色。 4.激活角色: 執行以下語句,使以上定義的角色成為可用狀態: Set Role role_name1 五、結束語 以Internet技術為代表的網路業務的迅猛增長為資料庫應用開辟了新的發展空間,同時也對資料庫的安全性管理提出了更高的要求,網路的開放性導致非法存取常有發生,因而深刻領會和理解資料庫許可權的具體設置方法,結合自身實際應用,制定出一套完整的安全保護策略具有重要意義。Informix Dynamic Server對以上控制語句的使用除角色外,嚴格執行SQL ANSI 標准,因此對建立在NT平台上的MS SQL Server同樣有效 &.мo.О旒 2007-12-19 17:29 您覺得這個答案好不好? 好(0)不好(0) 相關問題 資料庫的訪問許可權都有什麼 怎麼修改資料庫的用戶許可權! 資料庫是如何安裝和設置的? 資料庫連接設置 固定伺服器角色、固定資料庫角色各有哪幾類?有什麼許可權? 標簽:資料庫 許可權 設置 其他答案 如果是ORACLE資料庫,這樣可以分配許可權: GRANT SELECT ON SALARIES TO JACK 給SALARIES中JACK用戶的Connect角色賦予SELECT許可權 例如:創建一張表和兩個用戶分給他們不同的角色和許可權 CREATE TABLE SALARIES ( 2 NAME CHAR(30), 3 SALARY NUMBER, 4 AGE NUMBER); create user Jack identified by Jack create user Jill identified by Jill grant connect to Jack grant resource to Jill JILL 的角色為Resource你允許他對表進行選擇和插入或嚴格一些允許JILL修改SALARIES表中SALARY欄位的值 GRANT SELECT, UPDATE(SALARY) ON SALARIES TO Jill 執行:UPDATE Bryan.SALARIES SET SALARY = 35000 WHERE NAME = 'JOHN' 可以進行所有許可權范圍內的更新工作 使用表時的限制:SELECT * FROM Bryan.SALARIES 對表使用用戶名來加以標識