MySQL error 1143 (column-level SELECT denied) is not translated to AccessError
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 85/100
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
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
- Inclui um Dockerfile ou arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de datajoint/datajoint-python
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
datajoint/datajoint-python#1581 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
datajoint/datajoint-python#1539 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
-
Environment variables lose to datajoint.json for settings missing from ENV_VAR_MAPPINGTalvez já em andamento @dimitri-yatsenko assumiu há 1 dia. Aberta
datajoint/datajoint-python#1585 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
_job_start_time records the populating host's local time, with no zoneTalvez já em andamento @dimitri-yatsenko assumiu há 2 dias. Aberta
datajoint/datajoint-python#1584 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
database.name should namespace schema names on MySQL, as it does on PostgreSQLTalvez já em andamento @dimitri-yatsenko assumiu há 4 dias. Abertafeature
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 15/100
datajoint/datajoint-python#1582 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de datajoint/datajoint-python
Issues semelhantes
-
Agentic
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Imbad0202/academic-research-skills#979 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
reflex-dev/reflex#7561 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
prometheus-community/ansible#906 · 2 comentários ·