2012-03-04 90 views
7

He escrito un procedimiento almacenado en SQL Server.Quiero ocultar el script de un procedimiento almacenado en SQL Server 2008

Ahora es solo que no quiero que nadie vea mi script o lo edite.

Recuerdo que estoy trabajando en una identificación de inicio de sesión y una contraseña estándar. que se comparte con todos.

De alguna manera, donde puedo permitir que cada uno ejecute el procedimiento. Pero no deberían ver el script.

¡Salud! gracias

+0

En lugar de cifrar, debe reparar su seguridad. No hay excusa para que todos estén en el mismo inicio de sesión con los mismos derechos. – HLGEM

Respuesta

7

Usted está buscando WITH ENCRYPTION, que cifra el código detrás de su procedimiento almacenado.

CREATE PROCEDURE usp_MyProc 
WITH ENCRYPTION 
AS 
SELECT * 
FROM myTable 

Sólo una advertencia, a partir de MSDN:

Los usuarios que no tienen acceso a las tablas del sistema de bases de datos o archivos no pueden recuperar el texto ofuscado. Sin embargo, el texto estará disponible para los usuarios con privilegios que pueden acceder a las tablas del sistema sobre el puerto DAC o acceder directamente a los archivos de la base de datos.

Unas referencias y lectura adicional:

+0

Además, 'WITH ENCRYPTION' en SQL Server debería llamarse' WITH MINOR_OBFUSCATION'. Si sabe lo que está buscando, existen muchos recursos que ayudarán a descifrar un objeto del sistema, y ​​no están restringidos a usuarios privilegiados o DAC. –

+0

Cierto, no va a impedir que alguien esté decidido a ver el código, pero mantendrá fuera a la gran mayoría de las personas. –

2

Utilice la palabra clave encryption para su procedimiento almacenado. Esto ocultará el código:

CREATE PROCEDURE dbo.foo 
WITH ENCRYPTION 
AS 
BEGIN 
    SELECT 'foo' 
END 
+0

cualquiera todavía puede ejecutar el SP, ¿verdad? solo el código está oculto – LearnByReading

+0

Eso es correcto. –

3

SQL Server realmente no proporciona un método infalible para proteger el código del módulo. La cláusula WITH ENCRYPTION debe llamarse algo similar a WITH LOOSE_OBFUSCATION, ya que el "cifrado" se frustra fácilmente. No podrá usar nada en SQL Server para hacer que el código sea indescifrable, excepto para los espectadores más informales: cualquier persona determinada podrá superar los métodos nativos sin perder el tiempo.

Si bien esto puede ser lo suficientemente bueno para sus necesidades, probablemente una forma más segura (pero aún no perfecta) es poner parte o la totalidad de la lógica comercial del procedimiento into the CLR (read more here).

Cuestiones relacionadas