Я создаю GUI через Eclipse и использую Java;и приложение подключается к базе данных сервера SQL.Мне удалось добавить новых пользователей напрямую с помощью сервера Microsoft SQL с их соответствующими защищаемыми элементами или ограничениями.
Однако я хотел бы добавить новых пользователей через сам графический интерфейс и иметь возможность определять, к какой таблице они могут получить доступ.Или, по крайней мере, просто добавьте новых пользователей, а затем выясните, как определить, к какой таблице они могут получить доступ.Я сталкиваюсь с проблемой преобразования кода SQL в Java (я новичок во всем этом в конце концов).
Заранее спасибо,
Ниже приведен код SQL, который я нашел используемым в SQL Server для добавления нового имени входа, а затем нового пользователя. Идея состоит в том, чтобы заменить «NewAdminName» и «ABCD».с фактическим пользовательским вводом непосредственно из GUI:
CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO
Use BEPAWI;
GO
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NewAdminName')
BEGIN
CREATE USER [NewAdminName] FOR LOGIN [NewAdminName]
EXEC sp_addrolemember N'db_owner', N'NewAdminName'
END;
Ниже приведен код JAVA, над которым я сейчас работаю с Eclipse:
JButton btnNewButton = new JButton("Enter");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
String username = "";
String password = "";
username = UsernametextField.getText().trim();
password = PasswordtextField.getText().trim();
if (username.equals("")|| password.equals(""))
{
JOptionPane.showMessageDialog(null," name or password is wrong","Error",JOptionPane.ERROR_MESSAGE);
}
else
{
connection = DriverManager.getConnection(AdminMenu.DATABASE_URL, AdminMenu.UserName, AdminMenu.Password);
statement = connection.createStatement();
resultSetInt = statement.executeUpdate("CREATE LOGIN '"+username+"' WITH PASSWORD = ''"+password+"'' GO USE BEPAWI GO IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N''"+username+"'') BEGIN CREATE USER ['"+username+"'] FOR LOGIN ['"+username+"'] EXEC sp_addrolemember N'db_owner', N''"+username+"'' END;) VALUES('"+username+"', '"+password+"');");
System.out.println(resultSetInt);
System.out.println("Connecting to a selected database...");
System.out.println("Connected database successfully...");
String SMessage = "Record added for "+username;
JOptionPane.showMessageDialog(null,SMessage,"Message",JOptionPane.PLAIN_MESSAGE);
//close connection
((java.sql.Connection)connection).close();
}
}
catch (SQLException se)
{
//handle errors for JDBC
se.printStackTrace();
}
catch (Exception a) //catch block
{
a.printStackTrace();
}
}
});
Я считаю, что моя проблема в этой строке кода:
resultSetInt = statement.executeUpdate("CREATE LOGIN '"+username+"' WITH PASSWORD = ''"+password+"'' GO USE BEPAWI GO IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N''"+username+"'') BEGIN CREATE USER ['"+username+"'] FOR LOGIN ['"+username+"'] EXEC sp_addrolemember N'db_owner', N''"+username+"'' END;) VALUES('"+username+"', '"+password+"');");
Может быть, мне нужно добавить все столбцы из таблицы SQL?такие как sys.database_principals и FROM sys.server_principals
Еще раз спасибо,