2012-09-02 5 views
7

Mi requisito es "El bloqueo de nuestros archivos de base de datos se realiza de tal manera que se permiten todas las acciones tomadas dentro de nuestro proceso de aplicación, solo tercero el acceso a la aplicación/servicio del partido está bloqueado ". Para garantizar que el software de terceros no bloquee ninguno de nuestros archivos de base de datos después de que nuestra aplicación se esté ejecutando, debemos bloquear explícitamente todos los archivos de la base de datos para evitar eso.Cómo bloquear archivos DB desde C# para que software de terceros no pueda acceder a ellos

Antecedentes: Estoy trabajando en una aplicación de escritorio y sql ce como base de datos y N-hibernate. Algunas veces, cuando nuestra aplicación está ejecutando softwares de terceros, como softwares de respaldo, que se ejecutarán con frecuencia y harán una copia de respaldo del sistema en ese momento, bloquearán nuestros archivos db.

así que mi requisito sobre el lanzamiento de mi aplicación debería bloquear mis archivos db de tal manera que cualquier hilo o cualquier acción en mi aplicación debería realizar todas las operaciones en la base de datos, pero las operaciones de terceros deberían estar restringidas.

Probé con la muestra de FileLock, pero esto está fallando en mi aplicación cuando realizo alguna operación de DB a través de hibernación. Por favor, ayúdenme en esto, es realmente agradable, si es así, háganmelo saber.

+0

Sentiría que intentar adivinar qué software de terceros funcionará o dejará de funcionar y en qué momento no es la mejor manera de abordarlo; en su escenario, si el usuario deja que se ejecute su software de respaldo mientras usa su aplicación, y ha incluido el archivo de la base de datos de la aplicación en su plan de respaldo, entonces espera que esa base de datos también se incluya, ¿no? Si le informa al usuario por adelantado "no puede hacer una copia de seguridad de la base de datos mientras ejecuta esta aplicación", eso es claro para ellos y tampoco es algo inusual. –

+0

Estoy de acuerdo con Stephen aquí: es mejor cambiar lo que está accediendo a la base de datos que tratar de bloquearlo desde su aplicación. Por ejemplo, ¿qué pasa si su aplicación se bloquea y necesita reiniciarse? ¿Será capaz de obtener el bloqueo exclusivo en el arranque o se quedará atrapado con el anterior? ¿Qué sucede si alguna herramienta de informes o incluso una nueva versión en dev quiere conectarse a la base de datos de producción? Probablemente sea más fácil poner la base de datos en una carpeta que está excluida de la copia de seguridad o AV o lo que sea que obtenga los bloqueos en este momento. Tenga una ventana de mantenimiento o haga que su aplicación maneje las copias de seguridad. – Mike

Respuesta

0

El uso de File.Open para las operaciones de escritura sin desecharlo generalmente mantendrá el bloqueo en el archivo. Otros no podrán escribir, sin embargo, todavía pueden leerlo.

0

Crea una cuenta/usuario nuevo. Sobrescriba el permiso de archivo solo a este usuario. y suplantar su aplicación a este usuario recién creado. como resultado, otro usuario no puede usar su archivo.

-1

No sé desde cuándo SQLCE comenzó a soportar aplicaciones de escritorio. Prefiero usar SQLite. Admite de forma nativa el bloqueo del archivo de base de datos, utilizando solo el proveedor de sqlite. Mira eso. Por favor, hágamelo saber si necesita más detalles.

+0

Al parecer, SQLCE ha admitido aplicaciones de escritorio al menos desde la versión de SQL Server 2005. Sin embargo, la [documentación] (http://technet.microsoft.com/en-us/library/ms172417 (v = sql.90) .aspx) no está clara porque es una característica nueva. – ErikHeemskerk

Cuestiones relacionadas