Pages

Subscribe:

Ads 468x60px

2013年10月30日 星期三

搜索引擎優化 提高排名 如何提高排名

引用

Blog天生就得到搜尋引擎的喜愛,以至於排名總是較前。

◎Blog增加連結機會導致排名較前

不知道您在使用搜尋引擎時是否注意到,許多Blog的某篇文章經常排在搜尋結果前幾筆。這是意外嗎?其實只要理解搜尋引擎運作原理,就很容易知道何以Blog文章這麼討搜尋引擎喜歡。

搜尋引擎運作原理,筆者曾寫過「第三代網路行銷:搜尋引擎行銷」三篇。總結就是:1)增加網站內部網頁彼此連結,有助提高搜尋引擎排名;2)讓別人網站連結到你網站來,有助提高搜尋引擎排名。

一個典型的Blog網站,長得像這個樣子:

http://worker.bluecircus.net/

可以看到很多Blog網站常見的構成元素:日曆,文章分類,文章依月份(或年份)歸檔。每篇文章底部有「上一篇,下一篇」的連結。就是這些,在網站上增加了每篇文章彼此相互連結的機會。

此外,一般Blog還有Trackback 機制。簡言之,當別人在自己寫的文章中提到你的網站上某文章時,他除了建立連結連到你之外,還可以發送一個通知給你的網站,讓你的網站自動建立連結連回到他的網站。

跟外部網站的連結建立是如此自動化。因此我們常看到那些在搜尋結果排名靠前的Blog文章,往往都是被討論被連結最多次的文章。我們終於明白,Blog系統的呈現與運作方式,天生就符合搜尋引擎胃口。

◎搜尋引擎嗜食文字

除上述運作邏輯外,筆者在此補充幾點之前沒提到的搜尋引擎特性:

- 搜尋引擎喜歡文字很多的網頁

如果某個網頁上都是圖形,或者都是大量的連結連往別的網頁,該網頁在搜尋引擎是拿不到高分的,排名也無法靠前;搜尋引擎自有辦法判斷網頁上的文字內容是有意義的文字還是垃圾。

請參考這兩種頁面:

http://www.digitalwall.com/all

http://www.digitalwall.com/scripts/year.asp?txtYear=2006

同樣是站內文章列表,前者網頁僅將標題列出並做連結,後者除此之外還將內文第一段呈現出來在網頁上,讓網頁上具有更多有意義的文字。結果是,後者在搜尋引擎的排名上大獲全勝。

您是否發現,幾乎所有的Blog網頁上都充滿著大量文字。即使是首頁上充斥著文章標題列表,在標題之外也會順帶把第一段呈現出來先讓你看一下。在此,我們又再度看見了Blog在搜尋引擎上的排名優勢。

◎搜尋引擎喜新厭舊

回到我們對企業網站的討論上。相信大家對於「企業網站」一定不陌生,你很容易可以猜到上面一定有「公司簡介」,「產品介紹」,「最新消息」,「聯絡我們」,「企業徵才」,以及此類內容的延伸。

很無趣嗎?是很無趣!也難怪當企業主面對能飛天遁地的 Web 2.0時,完全想不出來該拿自己公司的網站怎麼辦!其中,對於搜尋引擎排名最致命的一點,就是這些內容幾乎不會更新。

一個很久沒有更新的網頁,在搜尋引擎的排名會被新的相關網頁往下擠,因為搜尋引擎喜歡新鮮的內容。一個頁面常常有更動的部分,會被搜尋引擎認為還「活著」。

想來想去,好像只剩「最新消息」會是常更新的部份。一個竅門是,讓你的網站上每個網頁都出現「最新消息」內容。請看範例:

http://www.digitalwall.com/scripts/display.asp?UID=358

頁面上主要內容文章已經寫完,未來很少有機會更新。但網頁右側部分卻可看到有個「近日產業動態」,那些內容是每天甚至每小時都在變動。對搜尋引擎來講,這整個網頁就是新鮮的,因為有變動的部份。

你或許發現了。每一個Blog網站上的每一篇文章或每一個網頁上,幾乎都有最新文章或者最新消息的連結。是的,這是Blog為什麼老是能拿到搜尋引擎排名前幾名的一個原因:他的每個網頁都是最新鮮的。

◎效果才是王道啦!管他幾點零

前些時候筆者和 1.0時代搞網路革命的老戰友工頭堅在 MSN上閒聊,問說是否感覺筆者的網站數位之牆最近在改版。他的第一個反應是:「有,變得 Web 2.0化了」。

這實在是個誤解。筆者網站使用老舊的 ASP 3.0,先前在加入 RSS機制時就已經吃足苦頭。改版目的是改善網站在搜尋引擎的排名(即所謂「搜尋引擎優化」),沒想到越改和當下流行的Blog介面越來越像。

這件事告訴我們,如果 1.0企業網站決心拉高搜尋引擎排名,改到後來會跟Blog很像,而企業主可能從沒聽過 Web 2.0,還被以為是跟風流行。事實上企業主很現實,能帶來客戶的就是好技術,管他幾點零。

此外,如果你公司從來就沒有網站,或者你懶得理解筆者解釋的這麼多原理,建議直接用Blog系統去架設網站會省力得多,反正效果一樣,像筆者這樣搞改版很辛苦。企業網站的 2.0之路,走來並不容易。

資料來源

mysql 指令收集

平常只下SQL Command
但一些權限指令都快忘光了
這邊也有詳盡介紹:http://businesswing.net/webdesign/php-cmd_data_export_and_import/#more-1958


mysql 忘記密碼
安裝完成後在OS Command Line 更改Root Password
1.先停掉mysql 
/etc/rc.d/init.d/mysql stop 

2.以--skip-grant-table 的參數啟動mysql 
safe_mysql --skip-grant-table& 

3. 更改root 密碼 
# mysql mysql 
mysql> UPDATE user SET password=password('newpassword') 
WHERE user='root'; 
mysql> exit 

4.停掉mysql再重跑 
# mysqladmin -uroot -p shutdown 
Enter password: //輸入新設定的密碼 

# /etc/rc.d/init.d/mysql start



//登入
mysql -u root -h hostname -p

// show 出資料庫
show databases;

//使用資料庫
use 資料庫名稱;

//檢查使用中的資料庫
select database();

//秀出資料庫
shell指令mysqlshow
mysql下 show databases;

//顥示連結的狀態
status

//秀出資料庫使用狀況
select database();

//秀出資料庫內的資料表名稱
show tables;

//秀出資料庫欄位名稱及內容
describe 資料表名稱;

//加入新的資料至欄位
INSERT INTO manber( 欄位, 欄位, )
VALUES ( '插入字串' , '插入字串' );

//加入欄位至資料庫尾端
ALTER TABLE `TABLE_NAME` ADD `新增欄位名稱` VARCHAR( 5 ) ;

//show 出 資料表內所有的內容
select * from 資料表名稱;

// show 出資料表後匯入一個新的文件
mysql -u root -hhostname -p -e "select * from cd limit 1" > 匯出的名稱

// 搜尋某筆的資料
select * from table名稱 where type_id='24';

//修改芋筆的資料
update table名稱 set 欄位1='5' where 欄位2='24' limit 5;

//記算資料庫筆數
select count(櫚位名) from table_name ;

select count(*) from table_name ;

timestamp下
select 櫚位名1,count(*) from table_name where Time < timename_timestamp('2003-5-8 12:0:0') group by 欄位名1 ; //亂數 select select * from twble_name order by rand() ; //新增資料 insert into 資料庫名稱(欄位1,欄位2) values(資料1,資料2); //刪除資料 delete from 資料庫名稱 ; //不用加星號 shell> mysqladmin -u root password "newpwd"
shell> mysqladmin -u root -h host_name password "newpwd"


Windows環境中,Login Mysql後,更改Root Pasword

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');

Unix環境中,Login Mysql後,更改Root Pasword

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');

查詢資料庫清單

shell> mysql -u root
mysql> SHOW DATABASES ;

建立資料庫

shell> mysql -u root
mysql> Create database DB_Name;

建立使用者及密碼,並賦予所需之權限

shell> mysql -u root
mysql>GRANT ALL PRIVILEGES ON DB_Name.*
TO User_Name@localhost IDENTIFIED BY 'newpwd'

更改使用者密碼

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
WHERE User = 'root';
mysql> FLUSH PRIVILEGES;

MySQL 常用的設定和指令記錄, 採 FAQ 方式記錄. 
MySQL 匯入 sql 指令
 
mysql -u userid -p [-h localhost] db_Name < xxxxx.sql
 
MySQL 於 mysql> 使用 less 看結果
pager less -n -i -S
直式列出 query 結果
SELECT * FROM TABLE_NAMEG
設定 mysql> 變成 (user@host) [(dbname)]>
於 .bashrc 加一行
export MYSQL_PS1="(u@h) [d]> "
MySQL 看 status
show status; 或 mysqladmin -u root -p status
MySQL 要讓 localhost 以外的 Client 連進來
/etc/mysql/my.cnf 拿掉 bind-address = 127.0.0.1 即可
MySQL 秀錯誤編號, 該如何查此編號對應的原因?
MySQL error 編號, 在 shell 下打 "perror 編號" 就可知道原因了, Example:
$ perror 134 MySQL error: 134 = Record was already deleted (or record file crashed) mysql error code shell> perror 12 System error: 12 = Cannot allocate memory
Check Table 是否有錯誤
CHECK TABLE tbl_name [fast] [quick], 詳可參見: 此連結
於系統運作下, 修復 TABLE
repair table table_name, 詳可參見: 此連結
MySQL 停止後, 於 shell 下修復 TABLE(MyISM)
myismchk /mysql/data/TABLE_NAME.MYI
MySQL 只 dump table 的 schema
使用此參數: --no-data, -d mysqldump -d -u root -p DB_NAME TABLE_NAME > TABLE_NAME.sql
MySQL 只 dump db 的 schema
使用此參數: --no-data, -d mysqldump -d -u root -p DB_NAME > DB_NAME.sql
MySQL 只 dump db 的 data
-c: SQL 語法前面會把欄位名稱也列出來 -t: Table mysqldump -u root -p -t -c DBNAME > DB_ALL_DATA.sql 或 mysqldump -u root -p -t DBNAME > DB_ALL_DATA.sql
MySQL 只 dump table 的 data
-c: SQL 語法前面會把欄位名稱也列出來 -t: Table mysqldump -u root -p -t -c DBNAME TABLENAME > DB_TABLE_DATA.sql 或 mysqldump -u root -p -t DBNAME TABLENAME > DB_TABLE_DATA.sql
Query 指定使用哪個 index 的語法
SELECT COUNT(*) FROM TABLE_NAME USE INDEX(XXX_idx)
看此 table_name 使用多少容量、空間
show table status like 'table_name';
看 table 如何 create 的
mysql> show create table table_name
如何看 mysql bin log
mysqlbinlog m10-relay-bin.001
如何看 SQL 語法使用到哪個 Index Key
mysql> EXPLAIN SELECT * FROM User
如何設定把 所有 對此 MySQL 所下的 SQL 語法都記錄下來
my.cnf [mysqld] log = /var/logs/mysql/mysql-query.log
如何找出 MySQL column欄位中的值不等於 0-9 的
SELECT * FROM TABLENAME WHERE column REGEXP '[^0-9]';
要將資料倒回 DB 的標準做法(若有設 Foreign Key 用此方法才能順利匯入)
  • mysql> SET FOREIGN_KEY_CHECKS = 0;
  • mysql> SOURCE dump_file_name;
  • mysql> SET FOREIGN_KEY_CHECKS = 1;
    設定 root 和其他 user 的密碼
    • mysqladmin -u root password '新密碼'
    • mysqladmin -u root -p
    • Enter password:    此時再輸入密碼(建議採用)
    • use mysql;
      mysql> UPDATE user SET password=password('新密碼') where user='root'; 
        只改 root 的密碼,如果沒有用 where ,則表示改全部 user 的密碼
    • mysql> FLUSH PRIVILEGES; 在 mysql 資料庫內,一定要用 flush 更新記憶體上的資料
    刪除空帳號
    • mysql> DELETE FROM user WHERE User = '';
    • mysql> FLUSH PRIVILEGES;
       
    建立新帳號
    • mysql> GRANT 權限 ON 資料庫或資料表 TO 使用者 IDENTIFIED BY '密碼';
        權限
         
        資料庫或資料表
         *.* 所有資料庫裡的所有資料表
         * 預設資料庫裡的所有資料表
         資料庫.* 某一資料庫裡的所有資料表   
         資料庫.資料表 某一資料庫裡的特定資料表
         資料表  預設資料庫裡的某一資料表
    設定/修改權限  
    • 用 root 登入 MySQL
        mysqladmin -u root -p
       Enter password:   
    • mysql> GRANT all ON db35.* TO s35@'localhost' IDENTIFIED BY 's35';
         把 db35 這個資料庫(含其下的所有資料表),授權給 s35,從 localhost 上來,密碼為s35
       
    • mysql> GRANT all ON *.*  把所有資料庫及資料表授權給別人,太危險了!
       
    • mysql> GRANT all??? ON www.* TO '*'@'*' IDENTIFIED BY '';
          把 www 這個資料庫(含其下的所有資料表),授權給 任何機器任何人,無密碼(通常給不特定人士使用)
       
    • mysql> FLUSH PRIVILEGES;   (最後一定要強迫更新權限)

    MySQL指令大全

    基本指令 :

    資料定義語言 ( DDL ) :

    建立資料庫或資料表 :   create
    更變資料庫或資料結構 :   alter
    刪除資料庫或資料表 :   drop

    資料操作語言 ( DML ) :

    查詢資料 :   select
    插入資料 :   insert
    更新資料 :   update
    刪除資料 :   delete

    資料控制語言 ( DCL ) :

    確定資料的更變 :   commit
    設定使用者對資料的操作權限 :   grant
    取消使用者操作資料的權限 :   revoke
    取消資料更變 :   rollback




    實用指令 :

    顯示所有資料庫 :   show databases;
    選擇某一資料庫 :   use 資料庫名稱;
    列出資料庫底下的資料表 : show table from 資料庫名稱;
    顯示目前正在使用的資料表 :   show tables;
    顯示資料表欄位設定 :   describe 資料表名稱;
    重新整理資料表 :   optimize table 資料表名稱;
    顯示某個資料表的欄位設定 :   show columns from 資料表名稱;
    顯示某個資料表的索引欄位設定 :   show index from 資料表名稱;




    顯示 :

    1.顯示所有資料庫 :   show databases;
    2.顯示資料庫底下的資料表 : show table from 資料庫名稱;
    3.顯示資料表的欄位 :   show columns from 資料表名稱;

    顯示目前正在使用的資料表 :   show tables;
    顯示資料表欄位設定 :   describe 資料表名稱;
    顯示某個資料表的索引欄位設定 :   show index from 資料表名稱;



    新增 :

    1.新增資料庫 : create database 資料庫名稱;
    2.新增資料表 : create table 資料表名稱 ( 欄位名稱1 資料型態,欄位名稱2 資料型態 );
    3.新增欄位 : alter table 資料表名稱 add 欄位名稱 資料型態;


    修改 :

    3.修改資料表 : alter table 舊資料表名稱 rename 新資料表名稱; 
    修改欄位刪除 : alter table 資料表名稱 drop 欄位名稱

    刪除 :

    1.刪除資料庫 : drop database 資料庫名稱;
    2.刪除資料表 : drop table 資料表名稱;
    3.刪除欄位 : drop 欄位名稱;

    欄位刪除 : alter table 資料表名稱 drop 欄位名稱

    MySQL 指令、語法及管理

    這是一份筆記,專門紀錄 towns 在操作時需要的語法、指令或操作方式,還有更多的資料分散在茫茫網海中等待大家的發覺,感謝每一位大大無私的奉獻
    教學網站:http://www.hmes.kh.edu.tw/~jona/redhat/mysqlphp/mysqlsyntax.htm
    官方語法說明:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html



    =================================================================
     
    1、設定管理帳號:(mysql在安裝後,會建立一個root帳號,不過,沒有密碼)
    mysqladmin -u root password abc123 <==設定root帳號,密碼為abc123
    ==================================================================
    2、列出mysql現行環境
    mysqladmin variables -u root -p <==使用指令
    mysql>show variables; <==使用mysql語法
    ==================================================================
    3、登入資料庫
    mysql -u root -p towns <==使用root帳號,登入towns資料庫
    mysql -h localhost -u root -p towns <==使用root帳號登入本機端的towns資料庫, 做網路管理時,-h很重要
    ==================================================================
    4、建立資料庫
    4.1 mysql -u root -p <==使用root登入mysql
    4.2 打入root密碼
    4.3 create database towns; <==使用mysql語法,新增towns這個資料庫,“;”一定要加
    4.4 mysqladmin -u root create cacti -p <==也可以用指令建立資料庫
    ===================================================================
    5、刪除資料庫
    5.1 mysql -u root -p <==使用root登入mysql
    5.2 打入root密碼
    5.3 drop database towns; <==使用mysql語法,刪除towns這個資料庫,“;”一定要加
    ===================================================================
    6、列出現有資料庫
    6.1 mysql -u root -p <==使用root登入mysql
    6.2 打入root密碼
    6.3 show databases;
    6.4 mysql -e "show databases; " -p <==用指令顯示資料庫
    6.5
    6.1 mysqlshow -u root -p <==使用root登入mysql,並列出所有的資料庫
    6.2 mysqlshow -u root -p towns <==使用root登入mysql,並列towns資料庫中的資料表
    6.3 mysqlshow -u root -p towns towns <==使用root登入mysql,指定towns資料庫,並列出towns資料表
    資料來源:http://tsuozoe.pixnet.net/blog/post/21283890
    ===================================================================
    7、匯入資料庫
    7.1 需先建立資料庫(如4),可以看一下,dump下來的語法中,是否有下CREATE DATABASE,有就不用建了
    7.2 mysql -u root -p abc <'/home/towns/abc/abc.sql' <==將abc.sql匯入abc資料庫中
    7.3 如語法中,有下CREATE DATABASE,有就不用建了
    7.4. mysql -u root -p <'/home/towns/abc/abc.sql' <==將abc.sql匯入資料庫中(必需有CREATE DATABASE)
    ===================================================================
    8、匯出資料庫
    8.1 資料庫需存在
    8.2 mysqldump -u root -p abc >'/home/towns/abc/abc.sql' <==將abc資料庫匯出到abc.sql檔案
    8.3 mysqldump -u root -p -d abc > '/home/towns/abc/abc.sql' <==將abc資料庫的結構匯出到abc.sql檔案
    ===================================================================
    9、新增使用者(需先登入mysql server)
    9.1 使用grant新增
     9.1.1 grant all on abc.* to towns identified by 'abc123' with grant option;
     建立towns使用者具有abc完整的管理權,密碼為abc123
     9.1.2 grant all on abc.* to towns@localhost identified by 'abc123' with grant option;
     建立本機端towns使用者具有abc完整的管理權,密碼為abc123
     9.1.3 grant all on *.* to towns@localhost identified by 'abc123' with grant option;
     建立本機端towns使用者具有所有資料庫完整的管理權,密碼為abc123
     9.1.3.1 grant all on *.* to towns@localhost identified by 'abc123';
     與上面的方法相同,獨缺“允許特權”
    9.2 使用INSERT
    9.3 CREATE USER
    --------------------------------------------------------------------------------------------
    9.4 變更密碼
    9.4.1 grant all on *.* to towns@localhost identified by '123abc' with grant option;
    將towns使用者的密碼,由abc123變成123abc
    9.4.2 SET PASSWORD FOR 'root'@'localhost.localdomain' = PASSWORD( '*******' )
          SET PASSWORD FOR 'root'@'localhost' = PASSWORD( '*******' )
    ===================================================================
    10、刪除使用者
    10.1 DELETE FROM mysql.user WHERE User='towns' ;
    刪除使用者towns
    10.2 DROP USER test@localhost;
    ===================================================================
    11、登入資料庫帳號、密碼常見檔案位置
    ===================================================================
    12、更新資料庫資料(在做任何更動後,建議要使用這指令)
    12.1 flush privileges;
    ===================================================================
    13、在作業系統中,檢查權限之命令
    13.1 mysqlaccess localhost user mysql -U root -P abc123 <==檢查user帳號的權限
    13.2 mysqlaccess localhost towns abc123 -U root -P abc123 <==檢查towns帳號的權限
    13.3 mysqlaccess localhost towns -U root -P <==檢查towns帳號的權限,會要求打入root 密碼
    ===================================================================
    14、權限管理
    14.1 grant SELECT,INSERT,UPDATE on abc.* to towns@localhost identified by 'abc123';
    開放三種權限(SELECT,INSERT,UPDAT)給towns(本機端)
    14.2 開放多個資料庫(abc1、test、abc)給一個帳號(towns)管理,需一條一條加
    grant all on abc1.* to towns@localhost identified by 'abc123';
    grant all on test.* to towns@localhost identified by 'abc123';
    grant all on abc.* to towns@localhost identified by 'abc123';
    --------------------------------------------------------------------------------------------
    14.3 權限
    資料庫(DateBase),十五種權限:
    ALL PRIVILEGES、ALTER、CREATE、DELETE、DROP、FILE、INDEX、INSERT、PROCESS、REFERENCES、RELOAD、SELECT、SHUTDOWN、UPDATE、USAGE
    資料表(Table),八種權限:
    SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER 
    資料欄(column),三種權限:
    SELECT INSERT UPDATE
    修改權限
    14.4 REVOKE 權限 ON 資料庫(或資料表TABLE) TO user@host IDENTIFIED BY '密碼';
    ===================================================================
    GRANT ALL PRIVILEGES ON `abc` . * TO abc@% WITH GRANT OPTION ;
    DROP USER towns@';
    DROP USER test@localhost';
    ---------------------------------------------------------------------------------------------
    CREATE USER test@localhost IDENTIFIED BY '********';
    GRANT USAGE ON * . * TO test@localhost IDENTIFIED BY '********' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
    SET PASSWORD FOR root@localhost = PASSWORD( '*********' ) <==在資料庫中修改密碼方式
    ===================================================================
    16.忘記root密碼處理方式
    Linux:
    1.使用root登入
    2.停止mysql服務(for redhad base)
    service mysqld stop
    3.使用mysqld_safe指令
    mysqld_safe --skip-grant-tables &
    此時,會開啟一個安全模式,並停住
    4.開新的ssh,用root登入系統
    5.使用mysql帳號登入mysql中
    6.變更mysql中root密碼
    update user set password = password('abc123') where user = 'root';
    7.離開mysql
    8.重新啟動mysql
    9.使用root新密碼登入mysql
    -----------------------------------------------------------------------------------------------
    Windows:
    1.用系統管理員登陸系統。
    2.停止MySQL的服務。
    3.進入命令視窗,然後進入MySQL的安裝目錄,比如我的安裝目錄是c:\mysql,進入C:\mysql\bin
    4.跳過許可權檢查啟動MySQL,
    c:\mysql\bin>mysqld-nt --skip-grant-tables
    5.重新打開一個視窗,進入c:\mysql\bin目錄,設置root的新密碼
    c:\mysql\bin>mysqladmin -u root flush-privileges password "198651"
    c:\mysql\bin>mysqladmin -u root -p shutdown
    將newpassword替換為你要用的root的密碼,第二個命令會提示你輸入新密碼,重複第一個命令輸入的
    密碼。
    6.停止MySQL Server,用正常模式啟動Mysql

    7.你可以用新的密碼連結到Mysql了。
    命令:
    net mysql start 啟動MYSQL
    net stop mysql 停止MYSQL

    下面以在Windows系統上為例,linux上將步驟 4 的mysqld-nt換為safe_mysqld即可
    1 、停止mysql5服務:
    net stop mysql5
    2、開一個DOS視窗執行:
    http://www.mscto.com
    c:\mysql\bin>mysqld-nt --skip-grant-tables &
    3、再開一個DOS視窗執行:
    c:\mysql\bin>mysql mysql
    > update user set password = password('123456') where user = 'root';
    root密碼即為設置為123456!
    4、啟動mysql5服務:
    net start mysql5
    ===================================================================
    17.顯示目前mysql連線的threads狀態
    mysql>show processlist; <==使用mysql語法
    mysqladmin processlist -u root -p <==使用指令
    ===================================================================
    18.列出MySQL目前的狀態
    mysql> show status; <==使用mysql語法
    mysqladmin status -u root -p <==使用指令(結果不同)

    ===================================================================
    19.列出mysql的使用者
    SELECT User FROM mysql.user Order by User;
    帳號管理
    mysql中,帳號可設為僅本機使用、僅網路使用、兩者皆可,與mysql安全性有關
    mysql>grant all on *.* to towns@localhost identified by 'abc123' with grant option;
    利用語法建立towns可以管理所有資料庫、只能本機連線,擁有最大權限
    mysql>grant all on *.* to towns@localhost identified by 'abc123';
    利用語法建立towns可以管理所有資料庫、只能本機連線,少了grant權限,其他都有
    mysql>grant all on *.* to towns@ identified by 'abc123' with grant option;
    利用語法建立towns可以管理所有資料庫、能外部及本機連線,擁有最大權限
    mysql>grant all on *.* to towns identified by 'abc123' with grant option;
    利用語法建立towns可以管理所有資料庫、能外部及本機連線,擁有最大權限
    towns@locahost <==只能本機連線
    towns@192.168.8.176 <==只能192.168.8.176連線,用於限制帳號連線IP
    towns@127.0.0.1 <==只能本機連線
    towns@locahost.localdomain <==只能本機連線
    towns@ <==不限制連線來源,危險的設定,不過local不能連
    towns    <==不限制連線來源,危險的設定
    註:使用 towns@ 及 towns 在 mysql5 以上的版本會發生仍無法遠端連線,因為 mysql5 以上的版本多加了兩個特別的帳號,@localhost 及 @[hostname],這兩組帳號在我們設定帳號時,如果沒有給尾巴,會自動加上去,造成帳號不論local 或 遠端都無法連入
    19.1. mysql -e "GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY 'test' ; "
       利用指令來新增帳號
    ===================================================================
    20.資料庫匯出管理
     1. 更換資料庫
    登入mysql後,選用某個資料庫
    mysql> use test; <==連入test資料庫
     2 .顯示資料庫的資料表(需先選好資料庫,才能show tables)
    mysql> show tables;
    mysql -e "use test; show tables; " -p <==直接使用指令下SQL語法,並使用root登入(沒設user預設為root)
     3. 顯示特定資料表中的欄位
    mysql> describe table_name;
    ===================================================================
    21.免密碼登入mysql資料庫(用於資料庫定期備份等……)
     1.vim ~/.my.cnf
       [client]
       password=YOUR_MYSQL_PASSWORD
     2.chmod 600 ~/.my.cnf
    設定完成後,直接使用mysql -u [user],就可以登入了
    資料來源:http://plog.longwin.com.tw/my_note-unix/2009/04/09/mysql-login-backup-script-no-password-2009

    22. 關於帳號問題:當建立最大權限帳號後,該帳號無法本機登入
     1. 安裝後系統自動產生的帳號,兩個空白(@localhost、@localhost.localdomain)及三個root (root@localhostroot@127.0.0.1root@localhost.localdomain)帳號
     2. 此時 root 帳號可以本機登入,不可遠端登入
     3. 建立 towns 帳號後(建立最大權限帳號),towns 只能遠端登入,無法本機登入
     4. 建立 towns@localhost 帳號,towns 可以本機登入
    兩個空白帳號為安全性帳號,當我們使用towns登入時,沒寫完整帳號,會自動帶入@localhost,導致最大權限帳號無法本機登入,將兩個空白帳號刪除後,最大權限帳號(towns),就可以本機登入了。而這兩個空白帳號 towns 是透過第三方軟體,才刪除的

    23. mysql 連線數設定
    Linux 系統:my.cnf 檔中預設並無此參數,需手動加入
    設定 /etc/my.cnf
    max_connections=100 <==連線上限100
    max_user_connections=15 <==使用者連線上限15
    也可以設定單一帳號最大連線數,登入mysql後使用語法修改
    grant all on *.* to towns with MAX_USER_CONNECTIONS 15 ; <== towns帳號最大連線數為15
    windows 系統:在安裝設定時configuration Wizard即有詢問Concurrent Conections,自定值可到1400
    設定 C:\Program Files\MySQL\MySQL Server 5.1\my.ini
    max_connections=2037 <==連線上限 2037

     24. 使用phpmyadmin 設計資料庫
    教學:http://sofree.cc/phpmyadmin-mysql/

     25. 改變mysql 預設參數
    需修改 /etc/my.cnf檔
    例1:變更預設封包大小(max_allowed_packet)
    在[mysqld] 下面加入一行
    max_allowed_packet = 20M
    存檔後,重新啟重mysql
    使用mysqladmin variables -u root -p 確認 預設封包值是否已變更
    例2:變更資料庫預設語(character_set_server),這個只有mysql 4 才須要改
    character_set_server = utf8
    存檔後,重新啟重mysql
    使用mysqladmin variables -u root -p 確認character_set_server 及 character_set_database 是否變為 utf8
    註:不同的下指令方式得到不同的結果
    towns 使用 mysqladmin variables -u root -p 出現了以下五個值皆改為UTF8
    character_set_client
    character_set_connection
    character_set_database
    character_set_results
    character_set_server
    towns 登入資料庫後(mysql -u root -p),再使用 show variables;,得到以下結果
    character_set_client  ==> latin1
    character_set_connection  ==> latin1
    character_set_database ==> utf8
    character_set_results ==> latin1
    character_set_server ==> utf8

     26. 資料庫編碼轉換問題
    這個問題只會出現在 mysql 4版中
    使用指令 SET NAMES utf8;將character_set_client、character_set_connection、character_set_results改為 UTF8,這個是臨時性的修改相關資料:感謝前輩說明 http://chiouss0817.wordpress.com/2006/05/15/internal-charset-conversion-of-mysql/

    27. 免密碼登入mysql
    這個在備份時很好用
        vim /home/towns/.my.cnf <==建立或編輯.my.cnf檔
            [client]                                       <== 加入這兩行,[ ]中是打下密碼
            password= [mysql password] 
        chmod 600 ~/.my.cnf <==調整檔案權限

    28. mysql 效能觀察與調整
     

    29. Mysql UTF-8 中文排序問題
    towns在匯資料到Mysql資料庫中,如果欄位資料為中文UTF-8,會出現排序異常的情形,找了一些資料提供大家參考
     1.SELECT * FROM `test` ORDER BY CONVERT(`name` USING big5) DESC
     2.
    註:DESC為大到小,ASC為小到大


    2013年10月23日 星期三

    活动目录(Active Directory)及其相关概念

    本地组,全局组,通用组区别

    先谈作用范围:
    加入本地组的用户只在本机有相应的权限,全局组用户或以登录本域电脑,也可以登录信任域的电脑,而通用组只能登录到本域内的电脑!

    全局组Global:可以全局使用。即:可在本域和有信任关系的其它域中使用,体现的是全局性。MS建议的规则:基于组织结构、行政结构规划。
    域本地组Domain local:只能在本域的域控制器DC上使用。MS建议的规则:基于资源(夹、打印机……)规划。
    在域的混合模式下,只能把全局组加入到域本地组,即A-G-DL-P原则。
    注意:2k/03域的默认模式为:混合模式。则域本地组:只能在本域的域控制器DC上使用。若域功能级别转成本机模式(或称2k纯模式),甚至03模式,域本地组可在全域范围内使用。
    通用组Universal:组的成员情况,记录在全局目录GC中,非常适于林中跨域访问使用。集成了全局组和域本地组的长处。
    AGDLP
    A (account):
    用户帐户
    G (Global group):
    全局组
    DL (Domain local group):
    域本地组
    P (Permission):
    许可
    按照AGDLP的原则对用户进行组织和管理起来更容易
    域本地组生效范围域本地组所属的域。
    全局组本域和所有被信任的域。
    通用组森林中所有的域。
    组是可包含用户、计算机和其他组的活动目录或本机对象。
    Windows 2k域中,组根据其类型可以分为安全组(Securiy Group)和分布组(Distribution),根据其范围又可以分为全局组(Global Group)、域本地组(Domain Local Group)和通用组(Universal Group)。组的类型决定组可以管理哪些类型的任务,组的范围决定组可以作用的范围。
    1.组的类型
    1)分布组:分布组一般用于组织用户。使用分布组可以向一组用户发送电子邮件,由于它不能用于与安全有关的功能,不能列于资源和对象权限的选择性访问控制表(DACL)中。因此,只有在电子邮件应用程序(如Exchange)中才用到分布组。
    2)安全组:安全组一般用于与安全性有关的授权功能。使用安全组可以定义资源和对象权限的选择性访问控制表(DACL),控制和管理用户和计算机对活动目录对象及其属性、网络共享位置、文件、目录和打印机等资源和对象的访问。安全组中的成员会自动继承其所属安全组的所有权限。
      安全组具有分布组的全部功能,也可用作电子邮件实体。当向安全组发送电子邮件时,会将邮件发给安全组的所有成员。


    3、2  Windows域相关故障
    本节介绍Windows 2000/03 AD域故障的排错。首先我们会介绍活动目录(Active Directory)及其相关概念,然后介绍和域故障排错相关的知识、工具软件的使用,最后以实例的形式讲解针对具体的各种域故障如何进行排错,如何有效 地利用组策略来管理AD域、管理网络。
    通过本节的学习,读者可以掌握活动目录(Active Directory)及其相关概念,活动目录的功能、逻辑结构、物理结构;管理Windows 2000/03网络的方法,相关工具的使用;提高域故障排错能力,掌握活动目录上的最大应用:组策略。
    3.2.1 活动目录(Active Directory)及其相关概念
    要掌握Windows 2000/03 AD域故障排错,首先就得知道什么是域,什么是活动目录,活动目录的工作原理如何。以下内容作为后面域排错的基础理论知识至关重要。
    3.2.1.1为什么要使用活动目录?
    为什么要使用活动目录?
    有效地管理网络,也象管理电话号码、管理图书一样。我们会把网络中众多的对象:计算机、用户、用户组、打印机、共享夹……,分门别类、井然有序地放 在活动目录这个大仓库中。使用活动目录对你公司的网络进行管理,才是积极有效的管理方法,而且网络规模越大,越能体现出活动目录在管理网络上的高效性。
    3.2.1.2工作组(Workgroup)
    当然如果网络规模很小,也可以使用Windows工作组模式来进行管理,但其管理功能极其有限。对于一台Windows计算机来讲,它要么隶属于工作组,要么隶属于域。工作组是微软的概念,一般的普遍称谓是对等网。
    工作组通常是一个由不多于10台计算机组成的逻辑集合,如果要管理更多的计算机,微软推荐你使用域的模式进行集中管理,这样的管理更有效。你可以使 用域、活动目录、组策略等等各种功能,使你网络管理的工作量达到最小。当然这里的10台只是一个参考值,11台甚至20台,如果你不想进行集中的管理,那 么你仍然可以使用工作组模式。
    工作组的特点就是实现简单,不需要域控制器DC,每台计算机自己管理自己,适用于距离很近的有限数目的计算机。顺便说明一下,工作组名并没有太多的 实际意义,只是在网上邻居的列表中实现一个分组而已;再就是对于“计算机浏览服务”,每一个工作组中,会自动推选出一个主浏览器,负责维护本工作组所有计 算机的NetBIOS名称列表。用户可以使用默认的工作组名workgroup,也可以任意起个名字(不必担心重名),同一工作组或不同工作组间在访问时 也没有什么分别,都需要输入目标计算机上的用户名、口令进行验证。
    在工作组模式下,用户要访问10台计算机上的资源,就需要记住至少10个用户名和口令,工作组的这种分散管理性是它和域的集中式管理相比最大的缺点。AD域提供了对网络资源的集中控制,用户只需登录一次就可以访问整个活动目录的资源。
    3.2.1.3活动目录(Active Directory)和域控制器(Domain Controller)
    如果网络规模较大,这时我们就会考虑把网络中众多的对象(被称之为AD对象):计算机、用户、用户组、打印机、共享夹……分门别类、井然有序地放在 一个大仓库中,并做好检索信息,以利于查找、管理和使用这些对象(资源)。这个有层次结构的数据,就是活动目录数据库,简称AD库。
    接下来,我们应该把这个数据库放在哪台计算机上呢?是这样的,我们把存放有活动目录数据库的计算机就称之为域控制器(Domain Controller),简称DC。
    3.2.1.4活动目录架构(Active Directory Schema)
    架构是关于AD对象类型属性的定义。一种类型AD对象应该有哪些属性是由架构来定义的,比如它定义了用户对象有姓、名、登录名、口令等一系列的属 性。如果你想增加一个“性别”属性,这就要修改架构,一般称之为扩展AD架构,这要求你必须是林根域上的Schema Admins组成员才行。
    整个活动目录的林中只有一个架构,因此在活动目录中创建的所有对象都遵从同样的规则。也就是说你对架构的修改将影响到林中的所有域,你没办法实现同一林中的一个域用户对象有“性别”属性,而另一个域没有。
    3.2.1.5目录访问协议(DAP)和轻量级目录访问协议(LDAP)
    AD对象存储在活动目录中,客户和应用程序就通过访问活动目录,来查找这些存放于活动目录中的对象。用户访问这些AD对象,当然要遵照一定的规则和 约定,这就是协议。客户访问目录所用的协议被称之为目录访问协议(DAP),DAP是在X.500中定义的一个复杂协议,它的简化版本被称之为轻量级目录 访问协议(LDAP),被微软的活动目录AD所采用。LDAP是用于查询和更新活动目录的目录服务协议。
    3.2.1.6目录服务
    回过头来,我们再来看一下目录服务的定义。目录服务由X.500标准定义,目录是指一个组织中关于人和资源信息的结构化、层次化的库。在微软的 Windows 2000/03网络中,这个目录服务就是指活动目录(Active Directory)服务,又比如在Novell公司的NetWare上使用的目录服务叫NDS(Novell目录服务),目录服务的实质就是一种网络服 务。
    活动目录(Active Directory)作为网络目录服务,提供了用于组织、管理和控制网络资源的结构和功能,使我们有了集中管理Windows 2000/03网络的能力,管理员可以在一个地点管理整个网络。当然也可以利用OU进行委派控制,把一部分管理工作分派给OU管理员。
    3.2.1.7活动目录的逻辑结构
    活动目录的逻辑结构具有伸缩性,小:可以只是一台计算机,大:可以应用到大型跨国公司的网络。活动目录的逻辑组件包括:
    活动目录林(Active Directory Forest)
    活动目录树(Active Directory Tree)
    活动目录域(Active Directory Domain)
    组织单元(OU,Organizational Units)
    全局目录(GC,Global Catalog)
     
    接下来,以上图为例,进行相关讨论。这整个是一个林,mcse.com为林根域,有两个树,一个由mcse.com和它的子域 sub.mcse.com组成,另一个由my.com单独组成,林中有mcse.com,sub.mcse.com,my.com三个域。相关概念如下:
    林根域:在林中建立的第一个域,如:mcse.com 树:共用连续的命名空间的多层域,如mcse.com(父域)和sub.mcse.com(子域)
    树根域:树最高层的域,名最短。如:mcse.com和my.comWindows 2000/03可采用多层域结构,但最有效、最简便的管理方法仍是单域,所以大家在实际工作中要记住一个原则“能用单域解决,就不用多域”。
    一、域(Domain)
    域是活动目录中逻辑结构的核心单元。一个域包含许多计算机,它们由管理员设定,共用一个目录数据库,一个域有一个唯一的名字。
    域是安全边界,保证域的管理员只能在该域内有必要的管理权限,除非得到其它域的明确授权。每个域都有自己的安全策略和与其它域的安全联系方式。注 意:1、无法在一个域内实现不同的帐号策略。2、父域对子域并没有任何管理特权,但要注意林根域下有企业管理员组Enterprise Admins,它默认对林中的其它域是有特权的。
    父域和子域间默认就有双向可传递的信任关系,也就是说用户可以使用林中任意一个域内的计算机,登录到林内的任何一个域上(操作上就是使用欲要登录的 那个域的用户帐号);还可以,以自己本域的帐号登录,访问林内任何资源而不需要重新输入口令,当然要想能真正访问某一具体资源,在该资源上必须得有相应权 限才行。
    二、组织单元(OU,Organizational Units)
    在域下面,我们可以规划OU,放入计算机、用户、用户组等对象。也就是说通过OU,我们可以把对象组织起来,并形成一个有层次的逻辑结构。OU下面可以再建小OU,微软建议嵌套层次不要超过3层,我们平常一般1到2层就够用了。
    在规划OU时,要考虑到将来的管理和组策略的应用,一般应把有相同需求的计算机、用户等放在同一OU下。可以基于部门、基于管理责任,也可以基于地理位置来规划,使其最佳地适应你的公司的需求。
    在域下面规划OU,不是仅仅为得到一个层次结构,我们主要目的是要基于OU实现委派控制和将来链接相应的组策略来实现管理控制。委派的权限可以是完全控制,也可以是仅指定有限的权限(如:修改OU内的用户口令)给一个或几个用户和组。
    三、活动目录林(Active Directory Forest)
    在林中建立的第一个域,被称为林根域,如前面提到的mcse.com。在刚开始时候,我们这个林中只有一个树,树内只有一个域,域内只有一台计算机作为域控制器。也就是说此时我们整个林就只有一台计算机。
    接下我们也可以为它添加子域,如sub.mcse.com.,再添加了一个新树下的域my.com。这样我们的这个林下就有了两个树:一个树由mcse.com域、和它的子域sub.mcse.com构成,一个树仅由my.com域构成。
    四、活动目录树(Active Directory Tree)
    活动目录树是Windows 2000/03网络中的层次组织,同一树下的域共用连续的名字空间。如父域mcse.com(它同时也是树根域、林根域),树根域的名字一定是最短的。父 域mcse.com和子域sub.mcse.com之间默认就有一个双向的、可传递的信任关系。也正由于这种信任关系的可传递性,使得 sub.mcse.com和my.com间也有了双向信任关系。
    五、全局目录(GC,Global Catalog)
    全局目录GC包含了AD对象属性的子集,换句话说就是GC中包含了林中所有对象的摘要信息,也就是相对重要一些的属性,如用户对象的姓、名和登录名。全局目录GC本身必须首先是域控制器DC,GC不具有唯一性,可以有多个。
    全局目录GC使用户能够:1、查询整个林中的AD信息,无论数据在林中什么位置。以利于林中的跨域访问。2、使用通用组,即利用通用组成员身份的信息登录网络。
    3.2.1.8活动目录的物理结构
    在活动目录中,物理结构与逻辑结构是相互独立的。域控制器DC和站点(Site)组成了活动目录的物理结构。
    利用站点,我们可规划域控制器DC放置,优化AD复制,使用户就近查找DC登录。同时,知道物理结构将有助于排除复制和登录过程中出现的问题。
    一、域控制器(Domain Controllers)
    Windows 2000/03域控制器上存储有活动目录的副本,管理目录信息的变化,并把这些变化复制给该域上的其它域控制器。域控制器存储目录数据,管理用户登录、验证和目录搜索。
    一个域至少得有一台域控制器,为了容错就应该有两台,甚至多台。这主要要看网络的规模及分布。
    二、活动目录复制
    同一域内的DC之间要复制域信息,同一林内的DC间要复制林信息。活动目录复制确保AD信息对整个网络上的所有DC和客户机都是可用的。而活动目录的物理结构决定了复制发生的时间和地点。
    AD复制采用多主控复制模型,也就是说每个DC都存储有AD的可写副本,彼此间的复制是双向的。这点与NT4域的PDC到BDC(目录服务的只读副本)的单主控复制不同。
    在所有的DC把它们的变化都同步到活动目录中以前,DC在短时间内可能有不同的信息。按照默认,这一时间,同一站点内不越过3x5=15分钟。
    三、站点(Site)
    站点就是一个或几个高速带宽连接的IP子网的集合。管理员规划的站点,必须真实反映网络的物理结构和连接情况,把高速连接的部分规划为一个站点。也就是说,站点内一定是高速连接,站点间是低速连接。
    管理员利用规划站点,可以为活动目录配置访问和复制拓扑。使用Windows 2000/03网络可以使用最有效的链接和时间安排来复制和登录。创建站点,我们可以:1、优化AD复制,如:让其半夜进行,一天一次。2、优化用户登 录,如:使用户就近查找本站点内高速连接的DC进行登录。
    在活动目录中,物理结构与逻辑结构是相互独立的,没有什么必然的联系。一个站点可以有几个域,一个域也可以有几个站点。给站点起名字也是任意的,不必考虑和域名字间的联系。
    3.2.1.9操作主机(或叫主控、FSMO)
    前面我们介绍了AD复制采用多主控复制模型,但在有些特殊情况下,我们需要目录林进行单主控更新以避免冲突的发生。简单地说就是,这时我们就让一台DC说了算,来执行相关的AD改变,然后由它把变化复制到其它的DC上去,这台DC就是操作主机。共有五种操作主机,它们是:
    架构主控   Schema master   林内唯一
    域命名主控  Domain Naming master  林内唯一
    PDC仿真器   PDC Emulator master  域内唯一
    RID主控   RID master    域内唯一
    基础结构主控  Infrastructure master  域内唯一
    默认林根域的第一台DC就是这五种操作主机,同时还是GC。林内其它域的第一台DC是该域内的域唯一的那三种操作主机,即PDC仿真、RID、基础结构。。
    操作主机具有唯一性,但我们可以把操作主机移动到其它DC上,只要保证原来的不再是操作主机,也就是说保证这种唯一性即可。
    任何一台DC都可以是一操作主机(注意也只有DC才可以是操作主机),一台DC可以同时担当多种操作主机角色。
    对于操作主机的管理,我们可 以查看、传送、查封。传送(Transfer)和查封(Seizing)的区别在于:传送是在原操作主机联机的情况下进行的,传送后得到了新的操作主机, 原来的操作主机就不再是操作主机了,传送保证操作主机的唯一性。查封是在原操作主机有故障或失效,脱机的情况下的强行传输,也就是重新推选一个新的操作主 机,会有数据的丢失。查封不保证操作主机唯一性,原操作主机必须格式化后再接入网络。
    对操作主机的管理,可以使用图形化界面(管理的位置,将在下面逐个介绍说明),也可以使用Ntdsutil命令。下面我们简单介绍一下各种操作主机的作用。
    一、架构主控(Schema master)
    操作:AD架构/AD架构上右键/操作主机
    说明:默认情况下,架构的MMC管理工具不被安装。需要:
    1、运行adminpak.msi安装AD管理工具。Adminpak.msi可在03光盘I386目录下找到,或在03的windows\system32下找到。或者手动,开始/运行:regsvr32 schmmgmt.dll
    2、开始/运行:MMC,文件/添加删除管理单元/添加/AD架构
    关于架构,我们前面介绍过:架构是关于AD对象类型属性的定义。架构主控控制对架构的所有原始更新,也就是说对架构的修改、扩展,必须连接到林内唯一的这台架构主机上进行,然后由它复制到到林内所有的DC上。
    注意:只有架构管理员组(Schema Admins)可以对架构进行修改,例如安装Exchange Server、ISA阵列,就需要扩展架构,你应该以架构管理员身份进行。
    二、域命名(Domain Naming master)
    操作:AD域和信任关系/AD域和信任关系上右键/操作主机
    只有域命名主机可以向目录林中添加域或者删除域,保证域的名字在林中唯一。若域命名主机不可用,则无法在目录林中添加或删除域。
    为保证域的名字在林中唯一,域命名主机需要查询GC。若林功能级别为Windows 2000林模式,GC必须和域命名主机在同一台计算机上才行。若林功能级别为Windows Server 2003林模式,不要求GC必须和域命名主机非得在同一台计算机上。
    三、PDC仿真器(PDC Emulator master)
    操作:AD用户和计算机/域上右键/操作主机/PDC标签
    PDC仿真主机在五种操作主机中是最重要的,它的利用率很高。如果PDC仿真主机失效,必须尽快解决。它主要负责:
    1、如果Windows 2000/03域中还有NT4的BDC,它充当NT BDC的PDC,并为早期版本客户机提供服务。顺便说一下,NT4的域控制器在2000/03域中只能是BDC,不可能是PDC。
    2、管理运行NT、95/98计算机的密码变化,写入活动目录AD
    3、最小化密码变化的复制等待时间。若一台DC接受到密码变化的请求,它必须通知PDC仿真主控。用户登录时,如密码错误,进行验证的DC必先送至PDC仿真主控。因为普通DC不能确认到底是密码错误,还是它没有及时与PDC仿真主控同步。
    4、同步全域中的域控制器、成员计算机的时间。加入域的计算机,没有自己的时间。这是因为时间参数,在AD复制中是一个极为重要的因素,决定多主控 复制时,谁的修改最终生效。所以整个域的时间,都由PDC仿真主机来控制。你可以手动修改域成员计算机上的时间,但当AD复制过后,又会被改回成PDC仿 真主机上的时间。如果目录林是多层域结构,最终以林根域上的PDC仿真主机的时间为准。
    5、防止重写GPO的可能,修改组策略设置,默认也是要连接到PDC仿真主控上才行。当然这个默认值是可以修改的,或者找不到PDC仿真主控时,系统会提示你连到其它DC。
    四、相关标识符RID主控(RID master)
    操作:AD用户和计算机/域上右键/操作主机/RID标签
    在AD对象中的用户、组或计算机等对象,我们是可以为其分配权利权限的,被称为安全主体。安全主体与其它非安全主体对象的最主要的区别就在于:安全 主体对象有安全标识符(SID),可以为其分配权利权限。大家要明确:在活动目录中,所有对象都有GUID(全局唯一标识符),只有安全主体对象才有 SID。
    当我们在域内创建安全主体(例如用户、组或计算机)对象时,域控制器将域的SID与安全主体对象RID标识符相结合,以创建唯一的安全标识符 (SID)。形如:
    S-1-5-21-1553226038-2352558368-427082893-500
    其中S-1-5表示NT Authority(标识符颁发机构);上例中的21-1553226038-2352558368- 427082893为这个域的SID,在这个位置还可能是32(表示本地/域内置的本地组),也可能是本机的SID;后面跟的500表示 administrator用户。
    为了结合后面的案例,在这里我们把SID多作些介绍:
    SID
    名称
    描述
    S-1-5--500
    Administrator
    管理员帐户
    S-1-5--501
    Guest
    供来宾访问计算机或访问域的内置帐户
    S-1-5--502
    krbtgt
    密钥分发中心(KDC 服务使用的服务帐户
    其它还有:Domain Admins512),Domain Users513),Domain Guests514)。用户帐户、全局组可在林内或有信任关系的其它域使用,所以域间不可重复。
    S-1-5--515
    Domain Computers
    一个包括加入域的所有客户端和服务器的全局组
    S-1-5--516
    Domain Controllers
    一个包括域中所有域控制器的全局组。
    默认情况下,新的域控制器将添加到该组中。
    S-1-5-根域-518
    Schema Admins
    域为混合模式时为全局组,纯模式时为通用组。默认成员林根域的 Administrator。被授权更改AD架构。
    S-1-5-根域-519
    Enterprise Admins
    域为混合模式时为全局组,纯模式时为通用组。
    默认成员林根域的 Administrator
    被授权更改AD林结构,例如添加子域,删除域。
    S-1-5-32-544
    Administratrs
    /本地管理员,都只能在DC/本机使用,重复无妨。
    其它还有:Users545),Guests546),Power Users547),Account Operators548),Server Operators549),Print Operators550),Backup Operators551),Replicators552),Remote Desktop Users555)。都只能在本域内使用,域间重复无妨。
    S-1-1-0
    Everyone
    包括所有用户(甚至匿名用户和来宾)的组。成员身份由操作系统控制。在03中管理员可决定是否包括Gest
    S-1-5-6
    Service
    一个包括所有作为服务登录的安全主体的组。成员身份由操作系统控制。
    S-1-5-7
    Anonymous
    一个包括所有以匿名方式登录的用户的组。成员身份由操作系统控制。
    S-1-5-18
    Local System
    操作系统使用的服务帐户。
    S-1-5-19
    Local Service
    本地服务
    S-1-5-20
    Network Service
    网络服务
    RID操作主机就是负责向域内的DC分配 RID 池,每一个 Windows 2000/03 DC 都会收到用于创建对象的 RID 池(默认为 512)。RID 操作主机通过分配不同的池来确保这些 ID 在每一个 DC 上都是唯一的。若DC分到的RID池被用尽,可以向RID操作主机自动再次申请。
    通过 RID 主机,还可以在同一目录林中的不同域之间移动所有对象。当对象从一个域移动到另一个域上时,RID主控将该对象从域中删除。
    五、基础结构主控(Infrastructure master)
    操作:AD用户和计算机/域上右键/操作主机/结构 标签
    基础结构主机确保所有域间操作对象的一致性。当引用另一个域中的对象时(如域本地组中包括另一域的一个全局组),此引用包含该对象的全局唯一标识符 (GUID)、安全标识符 (SID) 和可分辨的名称 (DN)。
    如果被引用的对象移动,则在域中担当结构主机角色的 DC 会负责更新该域中跨域对象引用中的 SID 和 DN。也就是说,基础结构主机负责更新外部对象的索引(组成员资格),显然,单域不需要基础结构主机。
    基础结构主机是基于域的,目录林中的每个域都有自己的基础结构主机。基础结构主机不应该和GC在同一个DC上,应手动移走,否则将不起作用。前面我 们提到过,默认林根域的第一台DC就是这五种操作主机,同时还是GC。也就是说,这时基础结构主机实际上是失效的,不起作用。但这时只有一个林根域,基础 结构主机不起作用也没关系,若以后构建多层域,需要手动将其与GC分开。
    3.2.1.10域功能级别和林功能级别

    域功能
    级别
    2000
    2000混合模式
    DC:可包含NT4BDC
    2000本机模式
    所有DC均为2000,可以使用通用组、多主复制、SID历史、通讯组与安全组的转换、组的同名嵌套。
    03
    2000混合域功能级级别
    只是DC中多了03,即DCNT200003
    2000本机域功能级级别
    只是DC中多了03,即DC200003
    03临时域功能级级别
    不常用,DC03NT。需要专门工具
    03域功能级级别
    所有DC均为03,可以重命名域
    林功能
    级别
    2000林功能级别
    默认值,域命名主控必须是GC
    03林功能级别
    需要所有DC均为03,提升林时,会自动提升所有域为03域功能级级别。可传递的林信任关系、更灵活的组成员复制(基于操作)、更好的站点间路由选择、对GC的修复、架构的重新定义。
    3.2.1.11标识名(DN)和相对标识名(RDN)
    前面我们提到了客户使用LDAP协议来访问活动目录中的对象,那么LDAP是如何来标识一个在活动目录中的对象的呢?换句话说,LDAP是如何在活 动目录找到对象A,而不会错找成对象B的呢?这就要用到一个命名路径,即标识名(DN)和相对标识名(RDN)。DN为活动目录中的对象标识出LDAP命 名的完整路径;RDN用来标识容器中的一个对象,即它总是DN中的最前面一项。
    如:在Active Directory用户和计算机中,在mcse.com域下有个OU:Finance(财务),在Finance下又有个小OU:Sales(销售),在 其下有个用户,名叫Suzan Fine。则此用户对象的DN为:CN=Suzan Fine, U=Sales, U=Finance, DC=mcse DC=com。RDN为:CN=Suzan Fine。
    说明:
    1、其中DC表示DNS名字的域组件,OU表示组织单元,CN表示普通名字,CN可用于除了前两种以外的所有对象。比如:如果用户帐号不在OU中而 是在默认容器Users中,为表示Users容器应使用CN。即:CN=Suzan Fine, CN=Users, DC=mcse, DC=com。
    2、如果在命令中引用DN,且DN中有空格,如CN=Suzan Fine。应使用引号将整个DN括起来。如“CN=Suzan Fine, CN=Users, DC=mcse, DC=com”。
    3.2.1.12 域名服务系统(DNS)
    Windows 2000/03的活动目录服务与域名服务系统(DNS)紧密结合、集成一起,所以DNS故障是导致AD故障非常主要的因素之一,有统计数据显示AD故障的60%来自于DNS。
    使用活动目录、构建Windows 2000/03的域,网络上必须有可用的DNS服务器,并且必须支持SRV记录(Service Location Resource Record)和动态更新功能。如:MS Win2000/03 DNS,UNIX的DNS BIND 8.12及以上版本,使用已有的NT4 DNS是不行的。
    构建NT4域并不需要DNS的支持,但2000/03域必须有DNS,且满足上述要求。
    SRV记录的作用是指明域和站点(site)的DC、PDC仿真、GC是谁。动态更新也是2000/03DNS的新特色,管理员不必再象NT4 DNS那样手动为计算机创建或修改相应记录,在域成员计算机重启,或改名、改IP时依赖周期性更新,自动动态注册或更新相应DNS记录。
    如果没有DNS服务器的话,也不一定非得预装DNS,可以在安装AD过程中,选择在本机上安装2000 DNS。而且推荐初学者使用这种方法,因为系统会根据你提供的FQDN域名,自动创建好DNS区域(zone),并配置成AD集成区域,仅安全动态更新。 如果需要向外连或反向解析,用户只需配置上转发器和反向区域即可,不需要的话,直接就可以用了。
    如果决定在安装AD过程中在本机安装DNS,应在安装前,将本机TCP/IP配置/DNS服务器指向自己,这样在安装AD完成后重启时,SRV记录 将被自动注册到DNS服务器的区域当中去的,生成四个以下划线开头的文件夹,如_msdcs,03DNS在这里夹的层次结构有所变化,但本质没变。当然如 果忘了指,也可以后补上,只不过需要多重启一次。
    03DNS新特色:
    1、条件转发。
    转发器的作用是,如果本机无法解析DNS客户所发的查询请求,转发给转发器所指定的DNS服务器。在03DNS中新增了条件转发,即不同的DNS区域,可指定不同的转发器。
    利用条件转发,不仅可改善DNS查询,更重要的是有其实际意义。例如两个公司合并时,可将利用条件转发,基于对方域名将转发器配置为指向对方的 DNS服务器。这样DNS服务器就能解析对方网络中的DNS名称,并对其他网络信息建立巨大的缓存。又由于不必查询 Internet 上的 DNS 服务器,将大大减少DNS查询所用的时间。
    2、存根(stub)区域
    上面的场景也可用存根区域来解决,在03DNS中创建对方的存根区域,并指明对方的权威DNS服务器。注意在存根区域下只有对方域的SOA、NS及与NS相关的A记录,不会有对方其它的具体资源的记录。在有些情况下,与条件转发的作用还是有所不同的。
    3.2.1.13 组策略(Group Policy)
    组策略是活动目录上的最大应用,可以应用于2000/XP/03。组策略使许多重复的管理工作自动化、简单化,所以说组策略的应用程度是衡量2000/03管理员的重要尺度。
    组策略对象(GPO)也是一种AD对象,并且可设置权限。在域内创建,可链接到站点(Site)、域(Domain)、组织单元(OU),使组策略 的设置对一定范围的计算机/用户生效。本地(Local)策略可理解为一个特殊的组策略:在工作组下也可使用,只对本地用户和该计算机生效。使用 gpedit.msc进行管理,设置后立即生效,不需刷新。
    组策略设置的默认优先级是:LSDOU原则,本地策略优先级最低。可通过阻止继承(将阻止所有策略继承)、禁止替代(也就是必须继承,针对某个具体的GPO来设置)、组策略筛选器(实质为GPO权限)改变默认的优先级。
    组策略对象(GPO)包括组策略容器(GPC)和组策略模板(GPT)两部分。GPC位于AD用户和计算/System/Policies(需要选 中查看下的高级功能),仅是GPO的属性和版本信息,计算机通过GPC来查找GPT。具体的策略设置值存储在GPT中,位于DC的windows\ sysvol\sysvol下,以GUID为文件夹名。注意安装AD系统自带的两个GPO,使用固定的GUID,分别是:
    默认域的策略的GUID为31B2F340-016D-11D2-945F-00C04FB984F9
    默认域控制器的策略的GUID为6AC1786C-016F-11D2-945F-00C04FB984F9。
    组策略具体的设置内容2000到达600多条,03又新增200条左右。
    组策略设置中的安全模板(计算机和用户)部分,通过注册表生效,但并不永久改变注册表。若用户手动修改注册表中的组策略设置值,若策略未变,组策略不负责强制改回。
    安全策略是组策略的子集(一部分),只不过其MMC工具被单独提出来,放到管理工具下了。