MySQL error 1143 (column-level SELECT denied) is not translated to AccessError
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 85/100
Línea de trabajo
Empieza en src/datajoint/adapters/mysql.py en translate_error, donde la rama case 1044 | 1142: asigna los errores de acceso a AccessError. Lee las pruebas existentes de errores de acceso para ver cómo se configura un usuario restringido de MySQL y, después, añade un usuario con GRANT SELECT (...) a nivel de columna. Está terminado cuando el error 1143 lanza dj.errors.AccessError y una prueba cubre la consulta denegada por columna.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
On MySQL, a query that names a column the user has no privilege on fails with error 1143. DataJoint
passes that error through as a raw pymysql.err.OperationalError. The table-level equivalent, 1142, is
translated to dj.errors.AccessError. Code that catches AccessError to handle a missing privilege
therefore misses column-level grants.
Reproduction
import datajoint as dj
admin = dj.Connection("127.0.0.1", "root", "simple", 3306)
schema = dj.Schema("demo_access", connection=admin)
@schema
class Measurement(dj.Manual):
definition = """
measurement_id: int32
---
value: float64
operator: varchar(32)
"""
@schema
class Note(dj.Manual):
definition = """
note_id: int32
---
text: varchar(64)
"""
# '%%' because Connection.query formats its arguments
admin.query("CREATE USER 'reader'@'%%' IDENTIFIED BY 'pw'")
admin.query("GRANT SELECT (measurement_id, value) ON demo_access.measurement TO 'reader'@'%%'")
reader = dj.Connection("127.0.0.1", "reader", "pw", 3306)
reader.query("SELECT text FROM demo_access.note")
# datajoint.errors.AccessError: ('Insufficient privileges.', "SELECT command denied ... for table 'note'", ...)
reader.query("SELECT operator FROM demo_access.measurement")
# pymysql.err.OperationalError: (1143, "SELECT command denied ... for column 'operator' in table 'measurement'")
Observed on MySQL 8.0 with master at b9ace66.
Expected behavior
1143 raises dj.errors.AccessError, like 1044 and 1142. The PostgreSQL adapter already maps
insufficient_privilege (42501) to AccessError for table and column denials alike, so the change also
makes the two backends agree.
Where
src/datajoint/adapters/mysql.py, translate_error: case 1044 | 1142: becomes case 1044 | 1142 | 1143:.
A test beside the existing access-error tests would need a user with a column-level grant.
- Lenguaje dominante
- Python
- Estrellas
- 197
- Forks
- 99
- Merge medio
- 1 d 11 h
- PR fusionados (30 d)
- 10
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de datajoint/datajoint-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
datajoint/datajoint-python#1581 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
datajoint/datajoint-python#1539 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Environment variables lose to datajoint.json for settings missing from ENV_VAR_MAPPINGPosiblemente ocupada @dimitri-yatsenko la tomó hace 2 días. Abierto
datajoint/datajoint-python#1585 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
_job_start_time records the populating host's local time, with no zonePosiblemente ocupada @dimitri-yatsenko la tomó hace 3 días. Abierto
datajoint/datajoint-python#1584 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
database.name should namespace schema names on MySQL, as it does on PostgreSQLPosiblemente ocupada @dimitri-yatsenko la tomó hace 6 días. Abiertofeature
Dificultad 4/5 3-5 días Aptitud para principiantes 15/100
datajoint/datajoint-python#1582 ·
Los mantenedores suelen responder en 1 día
Todos los issues de datajoint/datajoint-python
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
jbacalso24/mimry#291 ·
Los mantenedores suelen responder en 1 día
-
good first issue
Dificultad 2/5 Menos de una hora Aptitud para principiantes 82/100
eli-alvarado/us-watchlist-alerts#14 ·
Los mantenedores suelen responder en 1 día
-
from-review-extraction python severity:nit
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
LearningCircuit/local-deep-research#7462 ·
Los mantenedores suelen responder en 2 días
-
mermaid_extract.py silently discards single-line state-diagram notes; sequence notes are keptAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
cathrynlavery/diagram-design#441 ·
Los mantenedores suelen responder en 2 días
-
[Cleanup] Include the public header in work_split.cppPosiblemente ocupada @blozano-tt la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
tenstorrent/tt-metal#60850 ·
Los mantenedores suelen responder en 1 día