linux程式設計——MySQL管理(第八章)

來源:互聯網
上載者:User

標籤:

8.2.2 建立使用者並賦予許可權作為MySQL管理員,最常見的工作就是維護使用者資訊——在MySQL中添加和刪除使用者並管理它們的許可權。通過在MySQL控制台中使用grant和revoke命令來系統管理使用者許可權。
1.grant命令MySQL的grant命令幾乎完全遵循SQL92的文法,它的常規格式是:
grant <privilege> on <object> to <user> [identified by user-password] [with grant option];
可以賦予的特權值如下所示:
值          說明
alter       改變表和索引
create      建立資料庫和表
delete      從資料庫中刪除資料
drop        刪除資料庫和表
index       管理索引
insert      在資料庫中添加資料
lock tables 允許鎖定表
select      提取資料
update      修改資料
all         以上所有
一些命令還有其他選項,例如create view授予使用者建立視圖的許可權。
授予特權的對象被標識為:
databasename.tablename
在linux系統中,*代表萬用字元,因此*.*代表每個資料庫中的每個對象,而foo.*代表資料庫foo中的每個表。
如果指定的使用者已經存在,它的特權會被編輯以反映所做的修改。如果該使用者不存在,就會以指定的特權被建立。
在SQL文法中,特殊字元%代表萬用字元,它與shell環境中*號的作用完全一樣。如果想要授予使用者rick從wiley.com域中人呢和主機訪問的許可權,可以把rick描述為:
[email protected]‘%.wiley.com‘
任何時候使用%萬用字元都必須把它放在引號中,以與其他文本分開。
還可以使用IP/網路遮罩標識(N.N.N.N/M.M.M.M)來為存取控制設定一個網路地址。
正如之前使用[email protected]‘192.168.0.0/255.255.255.0‘來授予rick從本網中任何機器串連的特權那樣,也可以指定[email protected]‘192.168.0.1‘來將rick的訪問限制到一台工作站,或者指定[email protected]‘192.0.0.0/255.0.0.0‘來擴大範圍以包括192這個A類網路中的所有機器。
下面是另外一個例子:
mysql> GRANT ALL ON foo.* TO [email protected]‘%‘ IDENTIFIED BY ‘bar‘;
這將建立使用者rick,它擁有對資料庫foo的所有許可權,並能以初始密碼bar從任何機器進行串連。
如果資料庫foo尚未存在,那麼使用者rick現在將擁有使用SQL命令create database來建立該資料庫的許可權。
IDENTIFIED BY子句是可選的,但在建立使用者的同時最好確保它們都設定有密碼。
SQL中的底線是一種匹配任意單個字元的模式,這與%匹配一個字串非常相似。
一般來說,with grant option只會用來建立二級管理員。但是,它也可以允許一個新建立的使用者將授予它的特權贈予其他使用者。
2. revoke命令管理員不僅可以授予使用者權限,同樣能夠剝奪使用者權限,這是通過revoke命令來完成的。
revoke <a_privilege> on <an_object> from <a_user>
這與grant命令的格式很相似。例如:
mysql> REVOKE INSERT ON foo.* FROM [email protected]‘%‘;
但是,revoke命令不能刪除使用者,如果想要完全刪除一個使用者,不要只是修改它們的許可權,而應用revoke來刪除它們的許可權。然後,可以切換到內部的mysql資料庫,通過從user表中刪除相應的行來完全刪除一個使用者:
mysql> use mysql;
mysql> DELETE FROM user WHERE user = "rick";
mysql> FLUSH PRIVILEGES;
因為未指定主機,所以可以確保刪除了想要刪除的MySQL使用者(本例是rick)的每個執行個體。完成這個之後,一定要返回自己的資料庫(使用use命令),否則仍然在MySQL自己的內部資料庫中。
delete與grant和revoke並不屬於同一範疇,由於MySQL處理許可權方式的需要,這裡的SQL文法是必需的。通過直接更新MySQL的許可權表(因此首先調用命令use mysql)來有效地完成修改的。
在更新表之後,必須使用命令FLUSH PRIVILEGES來告訴MySQL伺服器,它需要重新載入它的許可權表。
8.2.3 密碼
如果需要修改密碼,就需要以root使用者身份串連到MySQL伺服器,然後直接更新使用者資訊。例如:
mysql> use mysql;
mysql> SELECT host, user, password FROM user;
如果想要給使用者foo指定密碼bar,可以這樣做:
mysql> UPDATE user SET password = password(‘bar‘) WHERE user = ‘foo‘;
8.2.4 建立資料庫如果想要一個名為rick的資料庫,之前以相同的名字建立了一個使用者。首先需要授予使用者rick廣泛的許可權以允許它建立新的資料庫,這樣做對一個開發系統尤其有用,因為它可以讓使用者有更大的靈活性。
mysql> GRANT ALL ON *.* TO [email protected] IDENTIFIED BY ‘secretpassword‘;
現在以rick使用者身份登入並建立資料庫來測試使用權限設定:
$mysql -u rick -p
Enter password:
...
mysql> CREATE DATABASE rick;
告訴MySQL想使用新的資料庫:
mysql> use rick;
現在就有可以想資料庫中添加想要的表和資訊。在以後的登入中,可以在命令列的結尾指定資料庫,而不再需要使用use命令:
$mysql -u rick -p rick
在按照提示輸入密碼之後,作為串連過程的一部分,在預設情況下,將自動切換到使用資料庫rick。
8.2.5 資料類型現在,有了可以啟動並執行MySQL伺服器、一個安全的使用者登入和一個準備好的資料庫。接下來,需要建立一些包含列的表來儲存資料。但是,在此之前,需要瞭解MySQL支援的資料類型。
MySQL的資料類型非常標準:
1.布爾類型可以用關鍵字BOOL來定義布爾序列,它將有TRUE和FALSE,也可以持有NULL。
2.字元類型有多種字元類型可供選擇,前3個是標準的,後3個是MySQL特有的:
定義            說明
CHAR            單字元
CHAR(N)         正好有N個字元的字串,如果必要會以空格輸入鍵台。限制為255字元。
VARCHAR(N)      N個字元的可變長數組。限制為255個字元。
TINYTEXT        類似VARCHAR(N)
3.數值類型數值類型分為整型和浮點型。如下所示:
定義            類型        說明
TINYINT         整型        8位元據類型
SMALLINT        整型        16位元據類型
INT             整型        32資料類型,這是標準類型。
DOUBLE(D,N)     浮點型      有符號雙精確度浮點數,有D位元字和N位小數
NUMERIC(P,S)    浮點型      總長為P位的真是數字,小數點後有S位元字。與DOUBLE不同,這是一個準確的數,因此適合用來儲存貨幣值,但處理效率會低一點。
4.時間類型有5種時間資料類型可供選擇使用,如下所示:
定義            說明
DATE            儲存從1000年1月1日--9999年12月31日之前的日期
TIME            儲存從-838:59:59--838:59:59之間的時間
DATETIME        儲存從1000年1月1日--9999年12月31日最後一秒之間的日期
TIMESTAMP       儲存從1970年1月1日--2037年之間的時間戳記
YEAR            儲存年份
8.2.6 建立表至此,運行了資料庫伺服器,瞭解了如何分配使用者權限以及如何建立資料庫和一些基本的資料庫類型,現在可以建立表了。
一個資料庫只不過是一系列的行,而每行又由固定數目的列組成。它非常像電子錶格,除了每行都必須包含相同數目和類型的列,而且每行必須以某種方式不同於表中的其他行。
建立資料庫物件的完整SQL文法被稱為DDL(data definition language)。
建立表的基本文法是:
CREATE TABLE <table_name> (
colum type[NULL | NOT NULL] [AUTO_INCREMENT] [PRIMARY KEY]
[, ...]
[, PRIMARY KEY (colum [, ...])]
)
可以用DROP TABLE文法來刪除表:
DROP TABLE <table_name>;
關鍵字          說明
AUTO_INCREMENT  這個關鍵字告訴MySQL,任何情況,在該列中寫入NULL值時,都會自動把一個分配的遞增數字填入列資料中。這是一個非常有用的特徵,它可以通過MySQL來自動為表中的行分配一個唯一的數字,儘管它只能用於屬於主鍵的列。
NULL            一個特殊的資料庫值,它通常用來表示"未知",也能用來表示"無關",文法NOT NULL意味著這行不能儲存NULL值,這對阻止某些列持有NULL值是很有用的。
PRIMARY KEY     指出此列的資料必須是唯一的,該表每行中對應該列的值都應不同。每個表只能有一個主鍵。
現在建立一個名為children的表,它為每個孩子儲存一個唯一的數字、名和年齡。把孩子的編號作為主鍵:
CREATE TABLE children(
        children INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
        fname VARCHAR(30),
        age INTEGER
        );
注意,與大多數程式設計語言不同,列名children出現在列資料類型之前。
還可以使用另外一種文法將列定義和主鍵定義分開:
mysql> use rick
mysql> CREATE TABLE children(
        childno INTEGER AUTO_INCREMENT NOT NULL,
        fname varchar(30),
        age INTEGER,
        PRIMARY KEY(childno)
        );
MySQL用->提示符表示位於延續的行上。使用分號結束SQL命令,表示已經完成輸入並準備好讓資料庫處理請求。
如果出現了錯誤,MySQL允許回退到之前的命令,編輯它並通過按下斷行符號鍵重新輸入它。
現在向表中添加資料,使用SQL命令INSERT來添加資料,因為定義childno列為AUTO_INCRMENT列,所以不需要為此列提供資料,只需讓MySQL分配一個唯一的數字。
mysql> INSERT INTO children(fname, age) VALUES("Jenny", 21);
mysql> INSERT INTO children(fname, age) VALUES("Andrew", 17);
使用SELECT從表中提取資料來檢查資料是否被正確添加:
mysql> SELECT childno, fanme, age FROM children;
與明確的列出想選擇的列相比,也可以使用*號代表列,這將列出表中的所有列。這對互動使用很方便。但是在產品代碼中,應該始終明確地指定想要選擇的列。
啟動一個對資料庫伺服器的互動式會話,並切換到rick資料庫。然後,輸入SQL命令建立表,使用滿足需要的行來建立列。一旦使用分號結束了SQL命令,MySQL就將建立表。使用INSERT語句添加資料到新表中,允許childno列被自動分配數字。最後,使用SELECT來顯示表中的資料。

linux程式設計——MySQL管理(第八章)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.