Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

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

Aberta Para iniciantes
#1,586 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@Bhanu73120 já está trabalhando nisso.

Desde 14/10/2026.

  • #1587 de @Bhanu73120 — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
85/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
mysql, python
Domínio
databases

Direção de pesquisa

Comece em src/datajoint/adapters/mysql.py, em translate_error, onde o ramo case 1044 | 1142: mapeia erros de acesso para AccessError. Leia os testes de erro de acesso existentes para ver como um usuário restrito do MySQL é configurado e, em seguida, adicione um usuário com GRANT SELECT (...) em nível de coluna. Está pronto quando o erro 1143 lança dj.errors.AccessError e um teste cobre a consulta negada por coluna.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.

Linguagem predominante
Python
Estrelas
197
Forks
99
Merge médio
1d 11h
PRs com merge (30d)
10

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de datajoint/datajoint-python

Todas as issues de datajoint/datajoint-python

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.