Thật là bố láo!
Cái link mà bạn đưa ra http://www.sqlservercentral.com/Foru...24-1526-1.aspx chỉ là một message thread, mà người đầu tiên khởi động là vanhien62, hỏi một câu về decrypt(). Mà người ta cũng trả lời rằng, trong MS-SQL không có decrypt().
Đây hoàn toàn không phải là chứng minh của undocument decrypt(). Bạn VH ơi, bạn cần nên học thêm về thuyết chứng minh. Cái link này không có một giá trị cỏn con nào để chứng minh decrypt() là một hàm của Microsoft, undocumented.
Ngược lại, tôi đã đưa cho bạn một cái link, trong đó có những hàm undocumented của Microsoft, và tuyệt đối không có decrypt().
Tôi cho bạn một cơ hội thứ hai. Nếu bạn có thể chỉ cho mọi người (mà tôi có thể cam đoan rằng ban không thể, bởi vì không có cái hàm nào gọi là decrypt() được viết bởi MS hết), sau khi đã cài đặt SQL, thì làm cách nào để dùng cái hàm "undocumented" decrypt() đó. Bởi vì nói có sách, mách có chứng. Cha mẹ ông bà đã dạy mình như thế. Bạn đưa lên một doạn code "vô thừa nhận" để "dạy" cho mọi người cách bảo vệ code, mà không thể "dạy" thêm cho chúng tôi biết cách lấy cái hàm decrypt() ở đâu ra, e rằng bạn hơi hấp tấp và thiếu sót rồi.
Căn cứ vào cái link mà bạn VH đưa ra, trong đó có một người là Jones, là chủ biên (Editor) và cũng là administrator của SQLServerCentrol.com, nói là SQL không có hàm decrypt. Nhưng cũng có một người chạy được decrypt().
Tôi chạy thử decrypt() trên máy chủ SQL của tôi, và SQL báo lỗi như sau:
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near 'decrypt'.
Msg 103, Level 15, State 4, Line 3
The identifier that starts with 'B10B0CC46648A5ED011C474BC6C69A498B68F4FB2500D3D12 BE7CB60CC7C20A0B31069EBF931B5B422CBE8D9B961011917C AF9F697503E29FDE8B15004A24CD3' is too long. Maximum length is 128.
Msg 103, Level 15, State 4, Line 3
[=========> Bổ sung bài viết <=========]
Nhưng mà thôi, để kết thúc cuộc tranh luận vô bổ này, tôi xin đưa ra đây "hồ sơ" của decrypt(),
MICROSOFT SQL SERVER
Decrypt encrypted stored procedures
Joseph Gama & ShoeBoy
07.25.2002
Rating: -2.75- (out of 5)
This stored procedure will decrypt stored procedures, views or triggers that were encrypted using "with encryption".
It is adapted from a script by Joseph Gama and ShoeBoy. There are two versions: one for SP's only and the other one for SP's, triggers and views. For version 1, the input is object name (stored procedure, view or trigger), and for version 2, the input is object name (stored procedure, view or trigger), object type ('T'-trigger, 'P'-stored procedure or 'V'-view).
From PlanetSourceCode.com
Tưởng cũng nên cho bạn VH biết rõ hơn, SQLPIE không phải là một phần mềm dùng để decrypt những stored procedures mà người ta đã encrypted, vì đây không phải là mục đích của tác giả. Nó chỉ có thể dùng để scripting out những function/stored proc không có encrypted. Còn khi gặp những hàm được encrypted, thì SMO sẽ báo lỗi, và SQL sẽ báo lỗi là không thể scripting một hàm đã được encrypted. 3 năm trước đây, cái phần scripting chạy ok: SQLPIE có thể scripting tất cả những store proc mà người ta không có mã hoá. Sau này, sau khi tôi cài đặt SQL-2008 và update SMO library, thì cái hàm script() không còn xử lý được nữa, nó luôn luôn báo lỗi khi lấy ra cái phần chính của một stored procedure hay của một function.
và dưới đây là hàm dùng để scripting out SQL proc. hay function, dùng SMO.script(). Lỗi nằm trên hàng đã được highlight.
Code:
public int GenerateSQLProcedureScript(string szDatabase,string szFolder)
{
int RetVal = 0;
ScriptingOptions ProcDropOption = new ScriptingOptions();
ScriptingOptions ProcCreateOption = new ScriptingOptions();
// Create a folder to store all table script files
if(!Directory.Exists(string.Format("{0}\\Procedures",szFolder)))
{
this.UpdateProcess("Creating procedures folder", true);
Directory.CreateDirectory(string.Format("{0}\\Procedures",szFolder));
}
// Create the table manifest file
this.UpdateProcess("Creating manifest file for procedures", true);
string ManifestFile = string.Format("{0}\\{1}.Procedures.mnf",szFolder,szDatabase);
StreamWriter swManifest = new StreamWriter(ManifestFile);
ProcCreateOption.IncludeIfNotExists = true;
//ProcCreateOption.ContinueScriptingOnError = true;
ProcDropOption.IncludeIfNotExists = true;
ProcDropOption.ScriptDrops = true;
//ProcDropOption.ContinueScriptingOnError = true;
foreach (StoredProcedure Proc in this.smoServer.Databases[szDatabase].StoredProcedures)
{
if (!Proc.IsSystemObject)
{
string ProcFile = string.Format("{0}\\Procedures\\{1}.sql",szFolder,Proc.Name);
StreamWriter swSQLWriter = new StreamWriter(ProcFile);
swManifest.WriteLine(ProcFile);
this.UpdateProcess(string.Format("Generating {0} source file", ProcFile), true);
try
{
foreach (string procscript in Proc.Script(ProcDropOption))
{
swSQLWriter.WriteLine(procscript);
}
swSQLWriter.WriteLine("GO");
swSQLWriter.WriteLine();
// Trick: Have to call twice, one for generate the header, one for generate
// the body so that it won't wrap the body between single quotes and
// call sp_executeSQL.
// First write header
ProcCreateOption.DdlHeaderOnly = true;
ProcCreateOption.DdlBodyOnly = false;
foreach (string procscript in Proc.Script(ProcCreateOption))
{
swSQLWriter.WriteLine(procscript);
}
//Second write body
ProcCreateOption.DdlHeaderOnly = false;
ProcCreateOption.DdlBodyOnly = true;
foreach (string procscript in Proc.Script(ProcCreateOption))
{
swSQLWriter.WriteLine(procscript);
}
this.LogProcess(Proc.Name, "Script", true, "Success");
}
catch (SmoException smoError)
{
swSQLWriter.WriteLine(string.Format("--Error : {0}", smoError.Message));
UpdateProcess(string.Format("Error : {0}", smoError.Message), true);
this.LogProcess(Proc.Name, "Script", false, string.Format("{0} - The SQL code may be encrypted", smoError.Message));
}
swSQLWriter.WriteLine("GO");
swSQLWriter.WriteLine();
swSQLWriter.Flush();
swSQLWriter.Close();
}
else
{
this.UpdateProcess(string.Format("Skipping system procedure {0}", Proc.Name), true);
}
}
swManifest.Flush();
swManifest.Close();
return RetVal;
}
Và đây là cái link qua một trang của microsoft. Tại trang này, Microsoft đã công nhận đây là một cái bug của họ. Tưởng cũng nên nói rõ, bạn phải là một "thân chủ" của Microsoft, có mật mã mới vào dược trang này.
https://connect.microsoft.com/SQLSer...&wa=wsignin1.0
Bookmarks