Amazon RDS - SQL Server - privilégios de usuário mestre

5

Eu criei uma instância do RDS com o SQL Server Express Edition. A configuração da instância estava bem, e eu também consegui me conectar a ela.

Mas, uma vez conectado usando o usuário mestre, não posso criar nenhum banco de dados, esquema ou tabela no servidor. Ele continua dizendo que o usuário não tem permissão para realizar a operação.

O que eu poderia estar perdendo? O usuário mestre não deveria ter todos os privilégios por padrão? Se não, como devo proceder?

Obrigado por qualquer ajuda!

Editar:

Isso é o que estou tentando executar:

CREATE TABLE [dbo].[wt_category] (
    [sys_id] bigint NOT NULL IDENTITY(1,1) ,
    [sys_timestamp] timestamp NOT NULL ,
    [country] varchar(5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [days] date NOT NULL ,
    [pages] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL DEFAULT NULL ,
    [visits] int NULL DEFAULT NULL ,
    [page_impressions] int NULL DEFAULT NULL ,
    [visits_w_product] int NULL DEFAULT NULL ,
    [products] varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    PRIMARY KEY ([sys_id])
)

e eu recebo este erro:

[Err] 42000 - [SQL Server]CREATE TABLE permission denied in database 'rdsadmin'.

    
por Nirmal 07.04.2013 / 10:03

2 respostas

4

A mensagem de erro indica que seu usuário não tem permissão para criar uma nova tabela no banco de dados "rdsadmin".

Verifique se o banco de dados "rdsadmin" existe e se tem os privilégios corretos para o usuário que você está tentando executar os comandos.

Solução de problemas:

Para o SQL Server, você provavelmente quer algo assim:

Adicione o usuário administrador atual ao SQL Server Express 2008

CREATE LOGIN [domain\username] FROM WINDOWS;
GO
EXEC sp_addsrvrolemember 'domain\username', 'sysadmin';
GO

Para o MySQL:

  • O rdsadmin é o usuário administrador que é criado com o RDS e possui todos os privilégios globais (somente no host local). Isso é somente para uso pelo AWS / RDS, não por você.
  • quando criei um db / user no assistente de configuração do RDS, meu usuário 'test' foi criado, ele tinha a maioria dos privilégios globais (em%).

Nenhuma dessas contas tinha privilégios específicos concedidos em qualquer banco de dados. Você deve conceder privilégios explicitamente conforme necessário.

Eu geralmente faria isso fazendo login (no terminal ou usando uma GUI como o Sequel Pro) e executando o privilégio necessário. Neste exemplo eu iria logar no mysql com meu usuário 'test'.

Uma vez logado, você pode executar os comandos necessários do MySQL:

link ou link tem exemplos disso, mas aqui está um exemplo rápido:

CREATE DATABASE testdb;
CREATE USER 'testuser'@localhost IDENTIFIED BY 'CHANGEME';
GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@localhost;

É claro que você terá que substituir com o banco de dados / nome de usuário / senha apropriados (você pode pular os comandos db / user create se o db ou usuário já existir).

Você pode conceder um privilégio apenas ao localhost ou algo diferente, dependendo do que você está tentando alcançar.

    
por 07.04.2013 / 11:28
3

Em uma instância do Amazon RDS SQL Server, o banco de dados ' rdsadmin ' é usado pelo usuário do Amazon RDS rdsa para gerenciamento de instâncias. Ele aparecerá como o único banco de dados que não é do sistema em uma nova instância do RDS. Embora o usuário mestre tenha privilégios para realizar a maioria das ações no servidor, você não poderá modificar esse banco de dados nem precisará fazê-lo. Mais informações sobre as limitações do usuário mestre do RDS estão disponíveis aqui: SQL Server no Amazon RDS

Para criar uma tabela, você precisará primeiro criar um novo banco de dados para seus dados e, em seguida, criar sua tabela dentro desse novo banco de dados.

O script a seguir fornece um exemplo de criação de um banco de dados, criação de uma tabela, inserção, seleção e descarte da tabela e do banco de dados. Usando o login da conta "master" que você criou ao lançar o RDS, você deve ter os privs para executar este script sem problemas.

USE master;

CREATE DATABASE NewDB;
GO

USE NewDB;

CREATE TABLE NewTable (Msg TEXT);

INSERT INTO NewTable (Msg) VALUES ('THIS SHOULD WORK');

SELECT * FROM NewTable;

DROP TABLE NewTable;

USE master;

DROP DATABASE NewDB;
    
por 15.07.2013 / 09:56