Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

MySQL error 1143 (column-level SELECT denied) is not translated to AccessError

Abierto Apto para principiantes
#1,586 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@Bhanu73120 ya está trabajando en esto.

Desde el 14/10/2026.

  • #1587 de @Bhanu73120 — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
85/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
mysql, python
Área
databases

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

bug

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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de datajoint/datajoint-python

Todos los issues de datajoint/datajoint-python

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.