您正在看的SQLserver教程是:SQL問題匯編(1)。
開發人員從SQL Server 6.5升級到SQL
Server 7.0應該注意哪些問題?
對於一般帳號來說升級程序工作得非常棒。在升級到SQL Server 7.0過程中,SQL
Server 6.5中的別名被轉換成角色成員。例如,如果你的一個別名是“dbo”,
SQL Server將把你作為“db_owner”固定服務器角色中的成員。如果你有數個登錄名別名是“sales”,
SQL Server 7.0升級程序將創建一個“sales”角色,並為這些用戶創建帳號,然後把他們都放入到“sales”角色中。SQL
Server 6.5中的“sales”帳號所擁有的權限中被分配給SQL Server 7.0中的“sales”角色。升級過程中SQL
Server還清理系統權限的模式位,以消除重復的權限。
比較困難的情況是有人可能會把來自不同機器的10個數據庫恢復到單個的SQL
Server中,然後再升級。在SQL Server 6.5中,用戶帳號必須匹配master數據庫中的“syslogins”系統表和每個數據庫中的“sysusers”系統表。不幸的是,當你在SQL
Server 6.5中恢復來自其他服務器的數據庫時,它們不能夠匹配。當這種情況下數據庫被恢復後,其安全系統已經損壞,升級到SQL
Server 7.0後仍然是損壞的。
訣竅是在升級前保證你的SQL Server 6.5系統是工作良好的。升級前你還應該運行“sp_change_users_login”系統存儲過程來確保數據庫用戶和登錄名存在正確的映射關系。
使用SQL Server 7.0建立一個安全的數據庫的最好方法是什麼?
永遠不要給用戶直接訪問表的權限。如果你希望讓用戶使用交互式工具如Microsoft
Acess 2000來訪問數據庫,可以只給他們訪問視圖和存儲過程的權限,而不是對表的直接訪問權限。如果存儲過程的擁有者是“dbo”,而且存儲過程所引用的表和視圖的擁有者也都是“dbo”,給予用戶對存儲過程的執行(EXECUTE)權限就足夠了。這樣就根本不用檢查對表的訪問權限了。
你還可以使用其它安全特性,比如通過在存儲過程中加入商業邏輯來控制哪些字段或行能夠被訪問。視圖是阻止用戶直接訪問表的另一種途徑。與存儲過程的區別是,你可以為視圖授予SELECT、INSERT、UPDATE或DELETE權限,而存儲過程則只能授予EXECUTE權限。
還有一件需要注意的事情是,如果你在另外一個數據庫中執行SELECT語句,數據庫對象擁有者的的鏈式關系仍然適用。比如說,在由SQL
Server登錄名“sa”所擁有的pubs數據庫中,你就不能執行跨表查詢連接至被一個NT登錄名所擁有的數據庫中,即使兩個登錄名都是“sysadmin”角色的成員。如果你希望連接來自3個不同數據庫的表,那麼這3個數據庫的擁有者應該是同一個帳號。如果需要的話你可以使用存儲過程“sp_changedbowner”來改變數據庫的擁有者。