㈠ 在IT項目建設中,如何保證資料庫安全性
#雲原生背景#
雲計算是信息技術發展和服務模式創新的集中體現,是信息化發展的重要變革和必然趨勢。隨著「新基建」加速布局,以及企業數字化轉型的逐步深入,如何深化用雲進一步提升雲計算使用效能成為現階段雲計算發展的重點。雲原生以其高效穩定、快速響應的特點極大地釋放了雲計算效能,成為企業數字業務應用創新的原動力,雲原生進入快速發展階段,就像集裝箱加速貿易全球化進程一樣,雲原生技術正在助力雲計算普及和企業數字化轉型。
雲原生計算基金會(CNCF)對雲原生的定義是:雲原生技術有利於各組織在公有雲、私有雲和混合雲等新型動態環境中,構建和運行可彈性擴展的應用。雲原生的代表技術包括容器、服務網格、微服務、不可變基礎設施和聲明式編程API。
#雲安全時代市場發展#
雲安全幾乎是伴隨著雲計算市場而發展起來的,雲基礎設施投資的快速增長,無疑為雲安全發展提供土壤。根據 IDC 數據,2020 年全球雲安全支出占雲 IT 支出比例僅為 1.1%,說明目前雲安全支出遠遠不夠,假設這一比例提升至 5%,那麼2020 年全球雲安全市場空間可達 53.2 億美元,2023 年可達 108.9 億美元。
海外雲安全市場:技術創新與兼並整合活躍。整體來看,海外雲安全市場正處於快速發展階段,技術創新活躍,兼並整合頻繁。一方面,雲安全技術創新活躍,並呈現融合發展趨勢。例如,綜合型安全公司 PaloAlto 的 Prisma 產品線將 CWPP、CSPM 和 CASB 三個雲安全技術產品統一融合,提供綜合解決方案及 SASE、容器安全、微隔離等一系列雲上安全能力。另一方面,新興的雲安全企業快速發展,同時,傳統安全供應商也通過自研+兼並的方式加強雲安全布局。
國內雲安全市場:市場空間廣闊,尚處於技術追隨階段。市場規模上,根據中國信通院數據,2019 年我國雲計算整體市場規模達 1334.5億元,增速 38.6%。預計 2020-2022 年仍將處於快速增長階段,到 2023 年市場規模將超過 3754.2 億元。中性假設下,安全投入占雲計算市場規模的 3%-5%,那麼 2023 年中國雲安全市場規模有望達到 112.6 億-187.7 億元。技術發展上,中國在雲計算的發展階段和雲原生技術的程度上與海外市場還有一定差距。國內 CWPP 技術應用較為廣泛,對於 CASB、CSPM 一些新興的雲安全技術應用較少。但隨著國內公有雲市場的加速發展,雲原生技術的應用越來越廣泛,我們認為CASB、SCPM、SASE 等新興技術在國內的應用也將越來越廣泛。
#雲上安全呈原生化發展趨勢#
雲原生技術逐漸成為雲計算市場新趨勢,所帶來的安全問題更為復雜。以容器、服務網格、微服務等為代表的雲原生技術,正在影響各行各業的 IT 基礎設施、平台和應用系統,也在滲透到如 IT/OT 融合的工業互聯網、IT/CT 融合的 5G、邊緣計算等新型基礎設施中。隨著雲原生越來越多的落地應用,其相關的安全風險與威脅也不斷的顯現出來。Docker/Kubernetes 等服務暴露問題、特斯拉 Kubernetes 集群挖礦事件、Docker Hub 中的容器鏡像被「投毒」注入挖礦程序、微軟 Azure 安全中心檢測到大規模 Kubernetes 挖礦事件、Graboid 蠕蟲挖礦傳播事件等一系列針對雲原生的安全攻擊事件層出不窮。
從各種各樣的安全風險中可以一窺雲原生技術的安全態勢,雲原生環境仍然存在許多安全問題亟待解決。在雲原生技術的落地過程中,安全是必須要考慮的重要因素。
#雲原生安全的定義#
國內外各組織、企業對雲原生安全理念的解釋略有差異,結合我國產業現狀與痛點,雲原生與雲計算安全相似,雲原生安全也包含兩層含義:「面向雲原生環境的安全」和「具有雲原生特徵的安全」。
面向雲原生環境的安全,其目標是防護雲原生環境中的基礎設施、編排系統和微服務的安全。這類安全機制,不一定具備雲原生的特性(比如容器化、可編排),它們可以是傳統模式部署的,甚至是硬體設備,但其作用是保護日益普及的雲原生環境。
具有雲原生特徵的安全,是指具有雲原生的彈性敏捷、輕量級、可編排等特性的各類安全機制。雲原生是一種理念上的創新,通過容器化、資源編排和微服務重構了傳統的開發運營體系,加速業務上線和變更的速度,因而,雲原生系統的種種優良特性同樣會給安全廠商帶來很大的啟發,重構安全產品、平台,改變其交付、更新模式。
#雲原生安全理念構建#
為緩解傳統安全防護建設中存在的痛點,促進雲計算成為更加安全可信的信息基礎設施,助力雲客戶更加安全的使用雲計算,雲原生安全理念興起,國內外第三方組織、服務商紛紛提出以原生為核心構建和發展雲安全。
Gartner提倡以雲原生思維建設雲安全體系
基於雲原生思維,Gartner提出的雲安全體系覆蓋八方面。其中,基礎設施配置、身份和訪問管理兩部分由雲服務商作為基礎能力提供,其它六部分,包括持續的雲安全態勢管理,全方位的可視化、日誌、審計和評估,工作負載安全,應用、PaaS 和 API 安全,擴展的數據保護,雲威脅檢測,客戶需基於安全產品實現。
Forrester評估公有雲平台原生安全能力
Forrester認為公有雲平台原生安全(Public cloud platform native security, PCPNS)應從三大類、37 個方面去衡量。從已提供的產品和功能,以及未來戰略規劃可以看出,一是考察雲服務商自身的安全能力和建設情況,如數據中心安全、內部人員等,二是雲平台具備的基礎安全功能,如幫助和文檔、授權和認證等,三是為用戶提供的原生安全產品,如容器安全、數據安全等。
安全狗以4項工作防護體系建設雲原生安全
(1)結合雲原生技術的具體落地情況開展並落實最小許可權、縱深防禦工作,對於雲原生環境中的各種組成部分,均可貫徹落實「安全左移」的原則,進行安全基線配置,防範於未然。而對於微服務架構Web應用以及Serverless應用的防護而言,其重點是應用安全問題。
(2)圍繞雲原生應用的生命周期來進行DevSecOps建設,以當前的雲原生環境的關鍵技術棧「K8S + Docker」舉例進行分析。應該在容器的全生命周期注重「配置安全」,在項目構建時注重「鏡像安全」,在項目部署時注重「容器准入」,在容器的運行環境注重雲計算的三要素「計算」「網路」以及「存儲」等方面的安全問題。
(3)圍繞攻擊前、中、後的安全實施准則進行構建,可依據安全實施准則對攻擊前、中、後這三個階段開展檢測與防禦工作。
(4)改造並綜合運用現有雲安全技術,不應將「雲原生安全」視為一個獨立的命題,為雲原生環境提供更多支持的主機安全、微隔離等技術可賦能於雲原生安全。
#雲原生安全新型風險#
雲原生架構的安全風險包含雲原生基礎設施自身的安全風險,以及上層應用雲原生化改造後新增和擴大的安全風險。雲原生環境面臨著嚴峻的安全風險問題。攻擊者可能利用的重要攻擊麵包括但不限於:容器安全、編排系統、軟體供應鏈等。下面對重要的攻擊面安全風險問題進行梳理。
#雲原生安全問題梳理#
問題1:容器安全問題
在雲原生應用和服務平台的構建過程中,容器技術憑借高彈性、敏捷的特性,成為雲原生應用場景下的重要技術支撐,因而容器安全也是雲原生安全的重要基石。
(1)容器鏡像不安全
Sysdig的報告中提到,在用戶的生產環境中,會將公開的鏡像倉庫作為軟體源,如最大的容器鏡像倉庫Docker Hub。一方面,很多開源軟體會在Docker Hub上發布容器鏡像。另一方面,開發者通常會直接下載公開倉庫中的容器鏡像,或者基於這些基礎鏡像定製自己的鏡像,整個過程非常方便、高效。然而,Docker Hub上的鏡像安全並不理想,有大量的官方鏡像存在高危漏洞,如果使用了這些帶高危漏洞的鏡像,就會極大的增加容器和主機的入侵風險。目前容器鏡像的安全問題主要有以下三點:
1.不安全的第三方組件
在實際的容器化應用開發過程當中,很少從零開始構建鏡像,而是在基礎鏡像之上增加自己的程序和代碼,然後統一打包最終的業務鏡像並上線運行,這導致許多開發者根本不知道基礎鏡像中包含多少組件,以及包含哪些組件,包含的組件越多,可能存在的漏洞就越多。
2.惡意鏡像
公共鏡像倉庫中可能存在第三方上傳的惡意鏡像,如果使用了這些惡意鏡像來創建容器後,將會影響容器和應用程序的安全
3.敏感信息泄露
為了開發和調試的方便,開發者將敏感信息存在配置文件中,例如資料庫密碼、證書和密鑰等內容,在構建鏡像時,這些敏感信息跟隨配置文件一並打包進鏡像,從而造成敏感信息泄露
(2)容器生命周期的時間短
雲原生技術以其敏捷、可靠的特點驅動引領企業的業務發展,成為企業數字業務應用創新的原動力。在容器環境下,一部分容器是以docker的命令啟動和管理的,還有大量的容器是通過Kubernetes容器編排系統啟動和管理,帶來了容器在構建、部署、運行,快速敏捷的特點,大量容器生命周期短於1小時,這樣一來容器的生命周期防護較傳統虛擬化環境發生了巨大的變化,容器的全生命周期防護存在很大變數。對防守者而言,需要採用傳統異常檢測和行為分析相結合的方式,來適應短容器生命周期的場景。
傳統的異常檢測採用WAF、IDS等設備,其規則庫已經很完善,通過這種檢測方法能夠直觀的展示出存在的威脅,在容器環境下,這種方法仍然適用。
傳統的異常檢測能夠快速、精確地發現已知威脅,但大多數未知威脅是無法通過規則庫匹配到的,因而需要通過行為分析機制來從大量模式中將異常模式分析出來。一般來說,一段生產運營時間內的業務模式是相對固定的,這意味著,業務行為是可以預測的,無論啟動多少個容器,容器內部的行為總是相似的。通過機器學習、採集進程行為,自動構建出合理的基線,利用這些基線對容器內的未知威脅進行檢測。
(3)容器運行時安全
容器技術帶來便利的同時,往往會忽略容器運行時的安全加固,由於容器的生命周期短、輕量級的特性,傳統在宿主機或虛擬機上安裝殺毒軟體來對一個運行一兩個進程的容器進行防護,顯示費時費力且消耗資源,但在黑客眼裡容器和裸奔沒有什麼區別。容器運行時安全主要關注點:
1.不安全的容器應用
與傳統的Web安全類似,容器環境下也會存在sql注入、XSS、RCE、XXE等漏洞,容器在對外提供服務的同時,就有可能被攻擊者利用,從而導致容器被入侵
2.容器DDOS攻擊
默認情況下,docker並不會對容器的資源使用進行限制,默認情況下可以無限使用CPU、內存、硬碟資源,造成不同層面的DDOS攻擊
(4)容器微隔離
在容器環境中,與傳統網路相比,容器的生命周期變得短了很多,其變化頻率也快很多。容器之間有著復雜的訪問關系,尤其是當容器數量達到一定規模以後,這種訪問關系帶來的東西向流量,將會變得異常的龐大和復雜。因此,在容器環境中,網路的隔離需求已經不僅僅是物理網路的隔離,而是變成了容器與容器之間、容器組與宿主機之間、宿主機與宿主機之間的隔離。
問題2:雲原生等保合規問題
等級保護2.0中,針對雲計算等新技術、新應用領域的個性安全保護需求提出安全擴展要求,形成新的網路安全等級保護基本要求標准。雖然編寫了雲計算的安全擴展要求,但是由於編寫周期很長,編寫時主流還是虛擬化場景,而沒有考慮到容器化、微服務、無服務等雲原生場景,等級保護2.0中的所有標准不能完全保證適用於目前雲原生環境;
通過安全狗在雲安全領域的經驗和具體實踐,對於雲計算安全擴展要求中訪問控制的控制點,需要檢測主機賬號安全,設置不同賬號對不同容器的訪問許可權,保證容器在構建、部署、運行時訪問控制策略隨其遷移;
對於入侵防範制的控制點,需要可視化管理,繪制業務拓撲圖,對主機入侵進行全方位的防範,控制業務流量訪問,檢測惡意代碼感染及蔓延的情況;
鏡像和快照保護的控制的,需要對鏡像和快照進行保護,保障容器鏡像的完整性、可用性和保密性,防止敏感信息泄露。
問題3:宿主機安全
容器與宿主機共享操作系統內核,因此宿主機的配置對容器運行的安全有著重要的影響,比如宿主機安裝了有漏洞的軟體可能會導致任意代碼執行風險,埠無限制開放可能會導致任意用戶訪問的風險。通過部署主機入侵監測及安全防護系統,提供主機資產管理、主機安全加固、風險漏洞識別、防範入侵行為、問題主機隔離等功能,各個功能之間進行聯動,建立採集、檢測、監測、防禦、捕獲一體化的安全閉環管理系統,對主機進行全方位的安全防護,協助用戶及時定位已經失陷的主機,響應已知、未知威脅風險,避免內部大面積主機安全事件的發生。
問題4:編排系統問題
編排系統支撐著諸多雲原生應用,如無服務、服務網格等,這些新型的微服務體系也同樣存在著安全問題。例如攻擊者編寫一段代碼獲得容器的shell許可權,進而對容器網路進行滲透橫移,造成巨大損失。
Kubernetes架構設計的復雜性,啟動一個Pod資源需要涉及API Server、Controller、Manager、Scheler等組件,因而每個組件自身的安全能力顯的尤為重要。API Server組件提供的認證授權、准入控制,進行細粒度訪問控制、Secret資源提供密鑰管理及Pod自身提供安全策略和網路策略,合理使用這些機制可以有效實現Kubernetes的安全加固。
問題5:軟體供應鏈安全問題
通常一個項目中會使用大量的開源軟體,根據Gartner統計至少有95%的企業會在關鍵IT產品中使用開源軟體,這些來自互聯網的開源軟體可能本身就帶有病毒、這些開源軟體中使用了哪些組件也不了解,導致當開源軟體中存在0day或Nday漏洞,我們根本無法獲悉。
開源軟體漏洞無法根治,容器自身的安全問題可能會給開發階段帶的各個過程帶來風險,我們能做的是根據SDL原則,從開發階段就開始對軟體安全性進行合理的評估和控制,來提升整個供應鏈的質量。
問題6:安全運營成本問題
雖然容器的生命周期很短,但是包羅萬象。對容器的全生命周期防護時,會對容器構建、部署、運行時進行異常檢測和安全防護,隨之而來的就是高成本的投入,對成千上萬容器中的進程行為進程檢測和分析,會消耗宿主機處理器和內存資源,日誌傳輸會佔用網路帶寬,行為檢測會消耗計算資源,當環境中容器數量巨大時,對應的安全運營成本就會急劇增加。
問題7:如何提升安全防護效果
關於安全運營成本問題中,我們了解到容器安全運營成本較高,我們該如何降低安全運營成本的同時,提升安全防護效果呢?這就引入一個業界比較流行的詞「安全左移」,將軟體生命周期從左到右展開,即開發、測試、集成、部署、運行,安全左移的含義就是將安全防護從傳統運營轉向開發側,開發側主要設計開發軟體、軟體供應鏈安全和鏡像安全。
因此,想要降低雲原生場景下的安全運營成本,提升運營效率,那麼首先就要進行「安全左移」,也就是從運營安全轉向開發安全,主要考慮開發安全、軟體供應鏈安全、鏡像安全和配置核查:
開發安全
需要團隊關注代碼漏洞,比如使用進行代碼審計,找到因缺少安全意識造成的漏洞和因邏輯問題造成的代碼邏輯漏洞。
供應鏈安全
可以使用代碼檢查工具進行持續性的安全評估。
鏡像安全
使用鏡像漏洞掃描工具持續對自由倉庫中的鏡像進行持續評估,對存在風險的鏡像進行及時更新。
配置核查
核查包括暴露面、宿主機加固、資產管理等,來提升攻擊者利用漏洞的難度。
問題8:安全配置和密鑰憑證管理問題
安全配置不規范、密鑰憑證不理想也是雲原生的一大風險點。雲原生應用會存在大量與中間件、後端服務的交互,為了簡便,很多開發者將訪問憑證、密鑰文件直接存放在代碼中,或者將一些線上資源的訪問憑證設置為弱口令,導致攻擊者很容易獲得訪問敏感數據的許可權。
#雲原生安全未來展望#
從日益新增的新型攻擊威脅來看,雲原生的安全將成為今後網路安全防護的關鍵。伴隨著ATT&CK的不斷積累和相關技術的日益完善,ATT&CK也已增加了容器矩陣的內容。ATT&CK是對抗戰術、技術和常識(Adversarial Tactics, Techniques, and Common Knowledge)的縮寫,是一個攻擊行為知識庫和威脅建模模型,它包含眾多威脅組織及其使用的工具和攻擊技術。這一開源的對抗戰術和技術的知識庫已經對安全行業產生了廣泛而深刻的影響。
雲原生安全的備受關注,使ATTACK Matrix for Container on Cloud的出現恰合時宜。ATT&CK讓我們從行為的視角來看待攻擊者和防禦措施,讓相對抽象的容器攻擊技術和工具變得有跡可循。結合ATT&CK框架進行模擬紅藍對抗,評估企業目前的安全能力,對提升企業安全防護能力是很好的參考。
㈡ C# web Web.config里sql連接資料庫
訪問資料庫有兩種方式:
Windows身份驗證登錄(不需要用戶名和密碼,適用於訪問本地資料庫,應用程序和SQL軟體安裝在同一台伺服器)
SQL Server 身份驗證登錄(適用於訪問其他計算機的資料庫,當然也可以用這種方式訪問本地資料庫)
根據樓主的情況應該用 SQL Server 身份驗證登錄
資料庫連接字元串一般寫在 connectionStrings節點下,非強制性(如寫在appsettings節點下),只不過這樣可以用
ConfigurationManager.ConnectionStrings["connString"].ConnectionString;
方便訪問
以下是筆者的一個 web.config 文件的內容
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="connString" connectionString="Data Source=.;Initial Catalog=TestDatabase;Integrated Security=SSPI"/>
</connectionStrings>
</configuration>
附:資料庫連接字元串的寫法
SQL Server connection strings
SQL ODBC connection strings
Standard Security:< br> "Driver={SQLServer};Server=Your_Server_Name;Database=Your_Database_Name;Uid=Your_Username;Pwd=Your_Password;"
Trusted connection:< br> "Driver={SQLServer};Server=Your_Server_Name;Database=Your_Database_Name;Trusted_Connection=yes;"
SQL OLE DB connection strings
Standard Security:
"Provider=SQLOLEDB;Data Source=Your_Server_Name;Initial Catalog= Your_Database_Name;UserId=Your_Username;Password=Your_Password;"
Trusted connection:
"Provider=SQLOLEDB;Data Source=Your_Server_Name;Initial Catalog=Your_Database_Name;Integrated Security=SSPI;"
SQL OleDbConnection .NET strings
Standard Security:
"Provider=SQLOLEDB;Data Source=Your_Server_Name;Initial Catalog= Your_Database_Name;UserId=Your_Username;Password=Your_Password;"
Trusted connection:
"Provider=SQLOLEDB;Data Source=Your_Server_Name;Initial Catalog=Your_Database_Name;Integrated Security=SSPI;"
SQL SqlConnection .NET strings
Standard Security:
1. "Data Source=Your_Server_Name;Initial Catalog= Your_Database_Name;UserId=Your_Username;Password=Your_Password;" < br>2. "Server=Your_Server_Name;Database=Your_Database_Name;UserID=Your_Username;Password=Your_Password;Trusted_Connection=False"
Trusted connection:
1. "Data Source=Your_Server_Name;Initial Catalog=Your_Database_Name;Integrated Security=SSPI;"
2."Server=Your_Server_Name;Database=Your_Database_Name;Trusted_Connection=True;"
希望回答對你有幫助
㈢ spring security3 動態從資料庫中讀取許可權信息<sec:authorize>標簽 url屬性不起作用
才給5分樓主太小氣了,spring security那麼難,當年我弄了2個星期才配置出來,至於你說那個標簽為什麼不起作用,是因為那標簽不是你說的那個含義,你去查一下挨批,要想使用對連接或資源的判斷必須使用acl或者你自定義的jsp標簽可以實現。。。
㈣ spring security 做的登錄許可權控制,頁面上點擊button請求查詢一些數據。項目重啟後,點擊按鈕仍可查詢
使用spring Security3的四種方法概述
那麼在Spring Security3的使用中,有4種方法:
一種是全部利用配置文件,將用戶、許可權、資源(url)硬編碼在xml文件中,已經實現過,並經過驗證;
二種是用戶和許可權用資料庫存儲,而資源(url)和許可權的對應採用硬編碼配置,目前這種方式已經實現,並經過驗證。
三種是細分角色和許可權,並將用戶、角色、許可權和資源均採用資料庫存儲,並且自定義過濾器,代替原有的FilterSecurityInterceptor過濾器,
並分別實現AccessDecisionManager、和UserDetailsService,並在配置文件中進行相應配置。
目前這種方式已經實現,並經過驗證。
四是修改spring security的源代碼,主要是修改和UserDetailsService兩個類。
前者是將配置文件或資料庫中存儲的資源(url)提取出來加工成為url和許可權列表的Map供Security使用,後者提取用戶名和許可權組成一個完整的(UserDetails)User對象,該對象可以提供用戶的詳細信息供AuthentationManager進行認證與授權使用。
該方法理論上可行,但是比較暴力,也沒有時間實現,未驗證,以後再研究。
說明一下,我目前調通的環境為: java1.6 + struts2.1.6 + spring3.0.1 + hibernate3.3.1 + spring security3.0.2 + oracle9i + weblogic10.3,
順便提一下,目前(2011-4-2)serutity的最新版本為3.1,比較穩定的版本為3.0.5和2.0.6。
當然在進行spring security3的下面4種方法介紹之前,先假定SSH2的環境已經配置完畢,進入正常開發的過程,並且已經導入
spring security3.0.2的5個jar包,分別為:
spring-security-acl-3.0.2.RELEASE.jar
spring-security-config-3.0.2.RELEASE.jar
spring-security-core-3.0.2.RELEASE.jar
spring-security-taglibs-3.0.2.RELEASE.jar
spring-security-web-3.0.2.RELEASE.jar
當然還有其他相關的jar包,在此不再贅述。
㈤ C#webservice如何做驗證碼
以下提供4位隨機數驗證碼製作方法:
一、在網站根目錄添加新項「web 服務」(同時會生成一個App_code),在app_code下的.cs文件頁面中的整個[web Method]下面再加一個[web Method],代碼如下:
[WebMethod]
public static int GetRandom()
{
Random ran = new Random();
int getNum = ran.Next(1000, 9999);
return getNum;
}
二、在你排好版的頁面中寫代碼,當然至少要有一個textbox輸入驗證碼,一個label(Label1)顯示驗證碼和一個button(Button1)刷新。代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = new Random().Next(1000,9999).ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = RandomService.GetRandom().ToString();
}
三、以上為製作方法,已經可以做出一個有刷新功能的頁面了。
(提醒:涉及登錄連接資料庫的還要注意添加命名空間data.sqlclient、web security以及防止頁面回調再刷新,用if(!Page.IsPostBack)等細節)
㈥ 對資料庫的操作出現了問題.
NSERT
語句與
FOREIGN
KEY
約束"FK_VoteOptions_z_VoteInfo"沖突。該沖突發生於資料庫"vote",表"dbo.z_VoteInfo",
column
'Vote_ID'。
不知道你資料庫了解多少,從上面的例子來看是資料庫內部出現問題而這個錯誤是很常見的!
如果你有兩個表
比如說
學生表,學生成績表
學生表當然是記錄學生的基本資料的
這個表裡面有一個pkid也就是自動編號
好
學生成績表裡面有一個typeid綁定於學生表的自動編號(foreign
key),這樣做的好處就是沒有存儲重復的數據,並且可以快速的聯繫到學生資料!
好
假如說你的學生表裡面有3個同學,那麼自動編號就有3個,分別對應於每一個同學,假設自動編號的值分別是1,2,3,那麼這個時候插入到學生成績表的時候的那個typeid欄位的值就只能是1,2,3的其中一個,否則就會如提示你的錯誤一樣
我想我應該描述清楚了!
其實你可以刪除掉約束,但是這樣做的後果就是很有可能讓你的數據對應出現混亂!
我給你寫一個資料庫的例子
--用戶表以及用戶blog表
create
table
userinfo
(
id
int
primary
key
identity(1,1),
name
varchar(30)
unique
not
null,
age
tinyint
check(age>0
and
age<=120)
)
--為了簡單,就只有一個文章標題,分類也去掉
create
table
blogs
(
id
int
primary
key
identity(1,1),
typeid
int
constraint
myfk
foreign
key(typeid)
references
userinfo(id),
caption
varchar(50),
)
insert
into
userinfo
values
('a',3)
select
*
from
userinfo
--自動編號為1,反正blogs的typeid欄位的值只能是userinfo中的id欄位的值的其中一個,如果
--插入userinfo欄位沒有的數據到typeid中,那麼就會錯誤
insert
into
blogs
values
(2,'a')--錯誤
insert
into
blogs
values
(1,'a')--正確
--insert
into
blogs
values
(2,'a')這個語句是錯誤的,如果你非要這樣,那麼只能夠刪掉約束
alter
table
blogs
drop
constraint
myfk--myfk是約束名,對應於你的是FK_VoteOptions_z_VoteInfo
insert
into
blogs
values
(2,'a')--這個時候就可以插入了,但是數據就不能正確對應了!
說了這么多,我想你應該可以明白!
㈦ 如何用.net 鏈接access資料庫
使用.net訪問Access資料庫:
1.BL層:新增一個DataAccess類。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
namespace Haley.FrameWork
{
/// <summary>
/// DataAccess 的摘要說明
/// </summary>
public class DataAccess
{
protected static OleDbConnection conn = new OleDbConnection();
protected static OleDbCommand comm = new OleDbCommand();
public DataAccess()
{
//init
}
/// <summary>
/// 打開資料庫
/// </summary>
private static void openConnection()
{
if (conn.State == ConnectionState.Closed)
{
㈧ C#關於資料庫聯庫問題
dbCommand.CommandText = "INSERT INTO post(name,subject,message,[date],ip)VALUES('";dbCommand.CommandText+=strName+"','"+strSubject+"','"+strMsg+"','"+strDate+"','"+strIP+"');";
dbConnection.Close();
dbConnection.Dispose();
Response.Redirect("default.aspx");
設置了CommandText之後什麼都不幹就dbConnection.Close()?????
修改代碼如下:
dbCommand.CommandText = "INSERT INTO post(name,subject,message,[date],ip)VALUES('";dbCommand.CommandText+=strName+"','"+strSubject+"','"+strMsg+"','"+strDate+"','"+strIP+"');";
int EffectRowCount = dbCommand.ExecuteNonQuery(); //執行命令並返回影響行數..
if(EffectRowCount > 0) //添加成功
{
Response.Redirect("default.aspx");
}
else
{
Response.Write("<script>alert('留言失敗');</script>");
}
dbConnection.Close();
dbConnection.Dispose();
//手打代碼.可能有幾個單詞打錯了.或者大小寫有誤..自己再編譯看看..
設置了SQL命令之後要記得執行..不然怎麼有用呢??
//補充:看看你的dbProviderFactories在什麼Namespace裡面,然後在這里
using Namespace的名字
㈨ C#的資料庫連接問題。 看看下面這段程序錯哪了怎麼修改!急需!!!
SqlConnection conn = new SqlConnection("server = .;integrated security = true;database =資料庫名"); 你可以用這個換掉你那句錯的,我也是剛答辯完的,這句可以。如果你的資料庫伺服器名稱是帶\SQLEXPRESS這個名稱的話。上面的代碼要換成:
SqlConnection conn = new SqlConnection("server = .\\SQLEXPRESS;integrated security = true;database =資料庫名"); 絕對可以,你可以試看看。
㈩ [求助]web.config 資料庫配置問題!
這是Visual Studio裡面的網站配置文件,是用xml語言寫的,xml是一種文本標記語言。
<connectionStrings> </connectionStrings>中間配置的是資料庫的連接字元串。Data Source是資料庫伺服器的名稱,AttachDbFilename是資料庫的路徑,Integrated Security=True;User Instance=True"是Windows身份驗證模式,providerName是指資料庫服務是由SQL Server提供的。