2009-05-22 17 views

Respuesta

7

Usted NO necesita preocuparse de ellos que tienen acceso a la herramienta. Simplemente asegúrese de que no conocen ninguno de los inicios de sesión de SQL para las bases de datos específicas que tienen permisos de lectura/escritura, si lo hacen, cambie la contraseña. Si tienen acceso a la base de datos a través de la autenticación de Windows, asegúrese de que estén en una función de lector de datos . Puede usar roles para administrar lo que los usuarios pueden hacer en SQL.

+0

Necesito conectarme a bases de datos y hacer algunas cosas, pero solo con una aplicación interna. No con la administración. –

4

Le sugiero que bloquee la base de datos y otorgue derechos de lectura (u otros) apropiados al usuario. De esta forma, el usuario puede usar el estudio de gestión para ejecutar consultas selectas y demás.

Si no desea que el usuario tenga ningún derecho, puede hacerlo también.

1

Si su aplicación solo usó procedimientos almacenados para modificar los datos, podría dar acceso a los usuarios finales para ejecutar los procesos almacenados, pero les denegaría el acceso para modificar las tablas.

1
  • No les hagas saber cuál es el inicio de sesión en la base de datos.
  • Si no puede restringir el inicio de sesión, utilice los procedimientos almacenados exclusivamente para las actualizaciones y deshabilite los permisos CREAR, ELIMINAR, INSERTAR o ACTUALIZAR para ese usuario.
1

Un Application Role le permitirá proteger los objetos de la base de datos a su aplicación en lugar del usuario que ha iniciado sesión.

0

Estoy de acuerdo con Jon Erickson como regla general

  • no permita que cualquier usuario acceder a las tablas, pero sólo permiten el acceso a través de procedimientos almacenados
  • no permita usuario general representa el acceso a los procedimientos almacenados, pero solo la cuenta con la que se ejecuta su aplicación (ya sea un inicio de sesión integrado o SQL)
0

Haga un buen uso de las funciones de la base de datos, si los usuarios solo deben tener acceso SELECT (leer) asígneles la función db_datareader. Incluso si inician sesión usando SSMS, solo podrán ejecutar sentencias SELECT.

14

Usted puede utilizar el comando DENY VIEW ANY DATABASE para el usuario (s) en particular. Esta es una nueva característica disponible en SQL Server 2008.

Impide que el usuario vea el catálogo del sistema (sys.databases, sys.sysdatabases, etc.) y por lo tanto hace que el DB invisible para ellos en SQL Management Studio (SSMS)

Ejecutar este comando desde la base de datos principal:

DENY VIEW ANY DATABASE TO 'loginName' 

El usuario todavía es capaz de acceder a la base de datos a través de su aplicación. Sin embargo, si inician sesión a través de SSMS, su base de datos no aparecerá en la lista de bases de datos y si abren una ventana de consulta, su base de datos no aparecerá en el menú desplegable.

Sin embargo, esto no es infalible. Si el usuario es lo suficientemente inteligente como para ejecutar el comando de consulta:

USE <YourDatabaseName> 

entonces verán la base de datos en el Analizador de consultas.

Dado que esta solución te lleva al 90%, le daría a la base de datos un nombre poco conocido que no permitía a los usuarios conocer el nombre de la base de datos.

+2

Si quiere DOWNVOTE, está bien, pero sea lo suficientemente maduro y cortés como para dejar un comentario sobre por qué cree que estoy equivocado. –

+0

No dice que necesitan tener * acceso de solo lectura * a través de su aplicación, dice que no quiere que puedan editar manualmente las tablas a través de SSMS –

2

Si su aplicación se está ejecutando como una cuenta de servicio/usuario, solo esa cuenta requiere acceso a la base de datos. La cuenta de los usuarios individuales no requiere ningún acceso a la base de datos y, por lo tanto, ni siquiera tendrán acceso de lectura. Tu aplicación será la puerta de entrada a los datos.

Si los usuarios ejecutan la aplicación en sus cuentas de usuario, conceda permiso de solo lectura. Simplemente puede agregarlos al rol db_datareader.

Espero que esto ayude!

1

Puede denegar los derechos de acceso de los "Usuarios" al archivo ejecutable ssms.exe, otorgando al mismo tiempo los derechos de usuarios/administradores relevantes.

2

Puede utilizar un disparador.

CREATE TRIGGER [TR_LOGON_APP] 
ON ALL SERVER 
FOR LOGON 
AS 
BEGIN 

    DECLARE @program_name nvarchar(128) 
    DECLARE @host_name nvarchar(128) 

    SELECT @program_name = program_name, 
     @host_name = host_name 
    FROM sys.dm_exec_sessions AS c 
    WHERE c.session_id = @@spid 


    IF ORIGINAL_LOGIN() IN('YOUR_APP_LOGIN_NAME') 
     AND @program_name LIKE '%Management%Studio%' 
    BEGIN 
     RAISERROR('This login is for application use only.',16,1) 
     ROLLBACK; 
    END 
END; 

https://www.sqlservercentral.com/Forums/1236514/How-to-prevent-user-login-to-SQL-Management-Studio-#bm1236562

+0

Esta parece ser la mejor respuesta aquí que aborda directamente la pregunta del OP. – Sturgus

Cuestiones relacionadas