sql >> Databáze >  >> RDS >> Sqlserver

Export výsledků dotazu do souboru za běhu

Zdá se mi, že v odpovědi na svůj dotaz nečekáte na SQL kód. Hlavním aspektem vaší otázky je bezpečnostní aspekt. Co byste měli udělat pro implementaci svého požadavku bez sysadminu privilegia a bez nové bezpečnostní díry? To je myslím vaše skutečná otázka.

Vidím alespoň 3 způsoby, jak vyřešit váš problém. Nejprve však krátké vysvětlení, proč existují oprávnění správce systému ve všech řešeních založených na Extended Stored Procedures . Rozšířené uložené procedury jako xp_cmdshell jsou velmi staré. Existovaly minimálně před SQL Serverem 4.2, prvním Microsoft SQL Serverem běžícím pod prvním Windows NT (NT 3.1). Ve staré verzi SQL Serveru jsem nebyl bezpečnostním omezením pro provádění takových postupů, ale později jsem taková omezení učinil. Je důležité pochopit, že všechny jsou obecným účelem postupy, které umožňují spuštění jakéhokoli procesu pod účtem SQL Server jako xp_cmdshell a sp_OACreate musí mít systémového správce omezení privilegií. Pouze orientované na úkol postupy s jasnou oblastí použití a oprávněními založenými na rolích mohou vyřešit problém bez bezpečnostní díry. Takže toto jsou 3 způsoby řešení, které jsem slíbil dříve:

  • Nový účet SQL vytvoříte na svém serveru SQL pomocí sysadmin privilegia. Potom vytvoříte uloženou proceduru, která používá některé z Extended Stored Procedures jako xp_cmdshell nebo sp_OACreate a technicky implementovat vaše požadavky (exportovat některé informace do souboru CSV). S ohledem na EXECUTE AS Ustanovení (viz http://msdn.microsoft.com/en-us/ library/ms188354.aspx ) vytvořenou uloženou proceduru nakonfigurujete tak, aby běžela pod účtem s sysadmin privilegia. Provedení tohoto postupu delegujete na uživatele s určitou rolí SQL, abyste byli flexibilnější ze strany delegování oprávnění.
  • Můžete použít Uložené procedury CLR místo xp_cmdshell a sp_OACreate . U vytvořené procedury byste také měli používat oprávnění založená na rolích.
  • Koncový uživatel nevolá přímo žádnou uloženou proceduru SQL, co vytvoříte. Existuje kus softwaru (jako služba WCF nebo webová stránka), který volá vaši uloženou proceduru SQL. Export do souboru CSV můžete implementovat uvnitř tohoto softwaru a ne uvnitř žádné uložené procedury SQL.

Ve všech způsobech implementace byste měli přesně definovat, kde budete heslo uchovávat účtu, pomocí kterého přistupujete k systému souborů. Existují různé možnosti, které máte, všechny s odpovídajícími výhodami a nevýhodami. Zosobnění je možné použít k povolení přístupu k systému souborů pomocí účtu koncového uživatele. Nejlepší způsob závisí na situaci, ve které se nacházíte.



  1. SQL se připojí ke korelovanému poddotazu, kde jsou tabulky propojeny překrývajícími se rozsahy

  2. Nelze se připojit k MySQL pomocí skriptu PHP při použití mysqli nebo PDO, ALE mysql funguje

  3. Počítání výskytů slov ve sloupci tabulky

  4. Android SQLite Query – získávání posledních 10 záznamů